Haskell:重载siginiture并为不同的输入类型返回不同的结果

时间:2013-01-13 15:11:32

标签: haskell

我需要这个功能:

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

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

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

1 个答案:

答案 0 :(得分:7)

这是类型类的用途:

class Blubb t where
    blubb :: t -> Int


instance Blubb Int where
    blubb n = n

instance Blubb Char where
    blubb _ = 42

这会使blubb重载以适用于IntChar。编译器将根据参数的类型选择要使用的正确值。

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

blubb :: Either Int Char -> int
blubb (Left  n) = n
blubb (Right _) = 42