我需要这个功能:
blubb :: ??? -> Int
blubb (n :: Int) = n
blubb (n :: Char) = 42
这是它应该如何工作:函数获得Int
并返回它。如果函数得到Char
,则返回一个常量值,其他情况则无关紧要。
由于Haskell中的类型系统可能不可能,但我需要让它工作......
答案 0 :(得分:7)
这是类型类的用途:
class Blubb t where
blubb :: t -> Int
instance Blubb Int where
blubb n = n
instance Blubb Char where
blubb _ = 42
这会使blubb
重载以适用于Int
和Char
。编译器将根据参数的类型选择要使用的正确值。
但是,请注意,您并未使用实际需要Either
的类型类。你可能真的想要这个:
blubb :: Either Int Char -> int
blubb (Left n) = n
blubb (Right _) = 42