我正在尝试为学习目的实现简单的切换功能:
就我而言:
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
让这个例子起作用?