Haskell List.insert适用于太少的参数

时间:2012-10-08 21:18:05

标签: haskell

所以,我正在开发一个函数,它从最小到最大按顺序获取两个列表,并以它们都被排序的方式合并它们。我的想法是将第二个列表拆分为头部和尾部,使用insert将头部排序到第一个列表中,然后再次运行该函数。但是在跑步时我得到:

Couldn't match expected type `[t0]' with actual type `[a0] -> [a0]'
    In the return type of a call of `List.insert'
    Probable cause: `List.insert' is applied to too few arguments

我对如何解决这个问题感到困惑,这里是代码:

combsort((x:xs):(y:ys)) = combsort(List.insert(y (x:xs)) : ys)
combsort((x:xs):[]) = []

1 个答案:

答案 0 :(得分:1)

你有一组括号太多,

combsort((x:xs):(y:ys)) = combsort(List.insert(y (x:xs)) : ys)

应该是

combsort ((x:xs):(y:ys)) = combsort (List.insert y (x:xs) : ys)

请注意,函数应用程序不需要括号。

在您的原始文件中,List.insert(y (x:xs))被解析为List.insert应用于将y应用于列表(x:xs)的结果,例如

List.insert foo
  where
    foo = y (x:xs)