这两个符号在Haskell中有何不同?

时间:2018-03-11 02:56:18

标签: haskell

我是Haskell的新手,仍然对某些符号感到困惑。

在函数标题中,我知道

func :: [Int] -> Int

表示输入是整数列表,输出是整数。

这与

有何不同
func :: (Ord a) => [a] -> a

我在问,因为它们看起来是一样的,我想知道为什么我们为相同的东西使用不同的符号。

1 个答案:

答案 0 :(得分:5)

第一个非常简单,正如您所说,它需要一个Int列表并返回一个Int

然而,第二个可以接受许多不同类型的输入(包括您自己定义的类型)。

关键是(Ord a)。这是说它必须是可订购类型的列表,如果它满足该要求,那么它是一个可以传递给这个特定函数的有效类型。

Ord类型类包括以下成员:

  • <
  • <=
  • >
  • >=

所以

func :: (Ord a) => [a] -> a
作为示例,

可能是一个获取可订购类型列表并返回该列表的最大成员的函数。这可以是[Int][Integer][Float]以及许多其他内容。