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
或者ab
,但不能同时是这两种类型。@mythbu如果你扩展你的问题来说明你想在哪里使用blubb
,这会有所帮助。然后我可以给你更具体的建议。blubb(左9)
。那么在这里指定9
应该是Int
是自动的,因为blubb
不是多态的。