与递归数据类型同名的构造方法

时间:2017-05-05 20:02:04

标签: haskell

我正在尝试为学习目的实现简单的切换功能:

就我而言:

Prelude> data Case a b = Case a b (Case a b) | Default deriving Show
Prelude> let switch Default = Nothing
Prelude> let switch u (Case x y z) = if (x == y) then y else (switch u z)

它的行为应该像

switch 2 Case 1 2 $ Case 2 3 $ Case 3 4 $ Default

返回3

switch 6 Case 1 2 $ Case 2 3 $ Case 3 4 $ Default

返回Nothing

当我尝试调用它时,我得到:

Prelude> switch 1 (Case 1 2 Default)
*** Exception: <interactive>:11:5-30: Non-exhaustive patterns in function switch

我想知道是否通过使用(案例a b)Haskell将会理解b是类型承载而不是值。是否有可能没有时间

data Casy a b = Case a b (Casy a b) | Default deriving Show

让这个例子起作用?

0 个答案:

没有答案