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

Haskell:重载siginiture并针对不同的输入类型返回不同的结果,haskell,Haskell,我需要这个功能: blubb :: ??? -> Int blubb (n :: Int) = n blubb (n :: Char) = 42 它应该是这样工作的:函数获取一个Int并返回它。如果函数得到一个Char,它将返回一个常量值,其他情况则无关紧要 由于Haskell中的类型系统,这可能是不可能的,但我需要让它正常工作…这就是类型类的用途: class Blubb t where blubb :: t -> Int instance Blubb Int whe

我需要这个功能:

blubb :: ??? -> Int
blubb (n :: Int) = n
blubb (n :: Char) = 42
它应该是这样工作的:函数获取一个
Int
并返回它。如果函数得到一个
Char
,它将返回一个常量值,其他情况则无关紧要


由于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上工作。编译器将根据参数的类型选择要使用的正确参数

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

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

我读过有关
数据的内容。或者
。这允许我有两种不同的输入类型吗?这可能是一个愚蠢的问题:但我如何使用您的代码?我了解它的功能,但不知道如何使用。@mythbu我刚刚更新了我的答案,添加了
版本。它允许您在同一个值内的两种类型之间存储备选值。因此,当你说某个东西的类型是
或者是a b
,你是说它可以是
a
或者a
b
,但不能同时是这两种类型。@mythbu如果你扩展你的问题来说明你想在哪里使用
blubb
,这会有所帮助。然后我可以给你更具体的建议。
blubb(左9)
。那么在这里指定
9
应该是
Int
是自动的,因为
blubb
不是多态的。