我是Haskell的新手。谁能解释一下它们的区别和用法Ord a
?
现在我已经熟悉了[a] -> [a] -> [a]
。但是这个,
Ord a => [a] -> [a] -> [a]
请详细解释我。
考虑:
-- merge :: [a] -> [a] -> [a] ?
merge [] ys = ys
merge xs [] = xs
merge (x:xs) (y:ys)
| y < x = y : merge (x:xs) ys
| otherwise = x : merge xs (y:ys)
特别要看倒数第二行。看到那个(<)
接线员了吗?
ghci> :i (<)
class Eq a => Ord a where
...
(<) :: a -> a -> Bool
我们在这里可以看到,对于不属于类的类型,不存在小于运算符Ord
;merge
因此除非我们有这个功能,否则就没有意义Ord a
。因此,我们将其类型签名重写为:
merge :: Ord a => [a] -> [a] -> [a]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句