我正在学习Haskell使用学习你一个Haskell。在第54页是 实现负责的,像这样:Haskell类型定义,=>等
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)是一个元组。元组的第一个元素必须是 数字,足够公平。第二个参数必须能够被订购。 参数是一样的 - 都是我。这意味着 的类型必须相同?
为什么不是(Num i,Ord j)?是不是第二个元组元素 引用列表?哪些可以是任何类型?
=>是什么意思?
i - > [a] - > [a]表示第一个参数是数字吗?第二参数是任何 类型列表,第三参数是任何类型列表。所以这是说第一个参数 numeric,第二个参数是任何类型的列表,并且它返回任何 类型的列表。我想这是可以理解的。
您暗示了这一点,但为了使它更加精确:比较中的n <='部分使用了'Ord',但是按照(heh)与'0'比较,我们需要'Num'。这就保证了'0'文字可以代表与'n'相同的类型(因为'0'实际上是'fromInteger(0 :: Integer)',其中'fromInteger :: Num i => Integer - > i ')。 – 2013-04-10 19:19:16