3

我需要这个功能:

blubb :: ??? -> Int
blubb (n :: Int) = n
blubb (n :: Char) = 42

它应该是这样工作的:函数获取Int并返回它。如果函数得到 anChar它返回一个常量值,其他情况无关紧要。

由于 Haskell 中的类型系统,这可能是不可能的,但我需要让它工作......

4

1 回答 1

8

这就是类型类的用途:

class Blubb t where
    blubb :: t -> Int


instance Blubb Int where
    blubb n = n

instance Blubb Char where
    blubb _ = 42

这重载blubb以在Ints 和Chars 上工作。编译器将根据参数的类型选择正确的使用。

但是,请注意,您没有使用实际需要的类型类Either。你可能真的想要这个:

blubb :: Either Int Char -> int
blubb (Left  n) = n
blubb (Right _) = 42
于 2013-01-13T15:19:20.677 回答