我是Haskell的新手,仍然对某些符号感到困惑.
在函数头中,我知道
func :: [Int] -> Int
Run Code Online (Sandbox Code Playgroud)
表示输入是整数列表,输出是整数.
这有什么不同
func :: (Ord a) => [a] -> a
Run Code Online (Sandbox Code Playgroud)
我问,因为它们似乎是相同的,我想知道为什么我们使用不同的符号来表示相同的东西.
第一个非常简单,如你所说,它需要一个列表Int并返回一个Int.
但是,第二个可以接受许多不同类型的输入(包括您自己定义的类型).
关键是(Ord a).这就是说它必须是可订购类型的列表,如果它满足该要求,那么它是一个可以传递给这个特定函数的有效类型.
Ord类型类包括以下成员:
<<=>>=所以
func :: (Ord a) => [a] -> a
Run Code Online (Sandbox Code Playgroud)
作为示例,可能是一个获取可订购类型列表并返回该列表的最大成员的函数.这可能是[Int],[Integer],[Float],和许多其他的事情.