此函数应同时适用于Int列表和Integer列表:
myFunc :: [Integer] -> [Char]
myFunc x = if (sum x `mod` 2 ==1) then "odd" else "even"
但它仅适用于整数列表。
最佳答案
类型类提供了一种通用的类型类型(它们实际上是类型组)。您可以使用类型类约束来代替显式类型Integer
,如下所示:
myFunc :: Integral a => [a] -> String
myFunc x = if (even (sum x)) then "even" else "odd"
这将指定它是从
[a]
到String
的函数,其中a
是类型变量,并且只要它是Integral
类型类的成员,就可以限制为任何类型。另一种说法是任何类型,只要它具有Integral
类型类的实例即可。这意味着它具有为该特定类型指定的typeclass方法。Integral
类型类适用于其值为整数(即整数)的类型。令人高兴的是,
Int
和Integer
都有一个为Integral
提供的实例,因此我们可以使用它。关于haskell - 在Haskell中获取int或integer的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45395776/