【发布时间】:2019-09-26 05:47:19
【问题描述】:
以下两个声明都适用于replicate' 3 5。我无法理解为什么你需要 Num 和 Ord 而 Integral 会这样做。第二个是我想出的,第一个在这里 - http://learnyouahaskell.com/recursion。
仅使用 Integral 我会失去什么?
1
replicate' :: (Num a, Ord a) => a -> b -> [b]
replicate' 0 x = []
replicate' n x = x:replicate' (n-1) x
2
replicate' :: (Integral a) => a -> b -> [b]
replicate' 0 x = []
replicate' n x = x:replicate' (n-1) x
注意:在下面威廉的回答之后,我需要在这里给出一些澄清(他在没有这个澄清的情况下理解了这个问题)。 http://learnyouahaskell.com/recursion中的代码是
replicate' :: (Num i, Ord i) => i -> a -> [a]
replicate' n x
| n <= 0 = []
| otherwise = x:replicate' (n-1) x
不是我在 1 中提到的。Willem 的回复解释了所有三个 sn-ps。
另外,Haskell type definition, => etc 也有相关问题
【问题讨论】:
-
欢迎来到 SO!我对你的问题有点困惑——你是在问为什么类型类
Ord和Num首先存在?或者您是在问为什么 LearnYouAHaskell 教的是第一个而不是第二个? -
你说得对——
Integral会更好。replicate' 3.3 5不应该这样做。 -
Integral暗示Num和Ord。 -
@FrankSchmitt 我试图了解其中的区别。
标签: haskell