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