我是Haskell的新手,仍然对某些符号感到困惑。
在函数标题中,我知道
func :: [Int] -> Int
表示输入是整数列表,输出是整数。
这与
有何不同func :: (Ord a) => [a] -> a
我在问,因为它们看起来是一样的,我想知道为什么我们为相同的东西使用不同的符号。
答案 0 :(得分:5)
第一个非常简单,正如您所说,它需要一个Int
列表并返回一个Int
。
然而,第二个可以接受许多不同类型的输入(包括您自己定义的类型)。
关键是(Ord a)
。这是说它必须是可订购类型的列表,如果它满足该要求,那么它是一个可以传递给这个特定函数的有效类型。
Ord类型类包括以下成员:
<
<=
>
>=
所以
func :: (Ord a) => [a] -> a
作为示例,可能是一个获取可订购类型列表并返回该列表的最大成员的函数。这可以是[Int]
,[Integer]
,[Float]
以及许多其他内容。