有人可以详细解释这个haskell功能的签名吗?

时间:2017-10-13 04:38:38

标签: sorting haskell arguments

此功能的签名令我感到困惑,所有在线信息让我感到困惑。有人可以向我解释一下这个函数的签名吗?也许可以给我一个例子?

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)

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 []解释为函数使用此签名:[]