此功能的签名令我感到困惑,所有在线信息让我感到困惑。有人可以向我解释一下这个函数的签名吗?也许可以给我一个例子?
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)
答案 0 :(得分:2)
此功能有两个参数:
sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a]
第一个参数本身是一个function
,它带有两个参数:一个可订购的东西和一个可订购的东西(这些是类型类Ord
中的任何东西),它返回类型{{1 }}
第二个参数是Ordering
这些东西,所有这些都是第一个参数(本身就是一个函数)需要两个完全相同的可订购物。
最后,list
函数返回相同可订购事物的列表。
现在,GHCI告诉你它希望第一个参数是你的签名应该是什么(一个函数本身需要两个参数并返回一个sort3
),但你传递了一个空列表而不是:
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 []
解释为函数使用此签名:[]
。