我正在使用 Learn You a Haskell 来学习 Haskell。在第 54 页是 take 的实现,如下所示:
take' :: (Num i, Ord i) => i -> [a] -> [a]
take' n _
| n <= 0 = []
take' _ [] = []
take' n (x:xs) = x : take' (n-1) xs
我理解除第一行之外的所有代码。
我理解的 :: 部分意味着这是一个类型定义?
(Num i, Ord i) 是一个元组。元组的第一个元素必须是数字,足够公平。第二个参数必须能够被订购。参数是相同的 - 都是 i。这意味着类型必须相同?
为什么不是 (Num i, Ord j)?第二个元组元素不是指列表吗?哪个可以是任何类型?
=> 表示什么?
i -> [a] -> [a] 表示第一个参数是数字?第二个参数是任何类型列表,第三个参数是任何类型列表。所以这是说第一个参数是数字,第二个参数是任何类型的列表,它返回任何类型的列表。好吧,我想这是可以理解的。