有人可以详细解释这个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)

+0

哦好吧,我明白你在说什么。感谢你的简单并快速回答问题 – christian