有人可以详细解释这个haskell函数的签名吗?
问题描述:
此功能的签名令我困惑,所有在线信息让我感到困惑。有人可以向我解释功能的签名,也许给我一个例子吗?有人可以详细解释这个haskell函数的签名吗?
sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a]
sort3 cmp xs | length(xs) < 1 = xs
这是我得到的错误。
Couldn't match expected type ‘a -> a -> Ordering’
with actual type ‘[t0]’
• In the first argument of ‘sort3’, namely ‘[]’
In the expression: sort3 []
In an equation for ‘it’: it = sort3 []
• Relevant bindings include
it :: [a] -> [a] (bound at <interactive>:2:1)
答
有两个参数给这个函数:
sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a]
第一个参数本身就是一个function
有两个参数:一个订购的东西和订购的东西(这是什么,这是在类型类Ord
),它返回Ordering
类型的东西。
第二个参数是list
这些东西,所有这些都与第一个参数(它自己是一个函数)将采用两个完全相同的可订购的东西。
最后,sort3
函数返回该可订购事物的列表。现在
,GHCI告诉你,它预计的第一个参数是你的签名怎么说也是应该的,但(这本身需要两个参数并返回一个Ordering
函数)你传入一个空列表,而不是:
Couldn't match expected type ‘a -> a -> Ordering’
with actual type ‘[t0]’
• In the first argument of ‘sort3’, namely ‘[]’
In the expression: sort3 []
换句话说:“你告诉我你的第一个参数是(a -> a -> Ordering)
,而是你调用函数这样sort3 []
,我无法解释[]
与此签名功能:(a -> a -> Ordering)
哦好吧,我明白你在说什么。感谢你的简单并快速回答问题 – christian