“ Ord a => [a]-> [a]-> [a]”和“ [a]-> [a]-> [a]”之间有什么区别

休ume

我是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

我们在这里可以看到,对于不属于类的类型,不存在小于运算符Ordmerge因此除非我们有这个功能,否则就没有意义Ord a因此,我们将其类型签名重写为:

merge :: Ord a => [a] -> [a] -> [a]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章