未能混合{,非}无点函数定义从句

时间:2018-05-21 11:14:35

标签: haskell

这样的定义
mergeLists :: Ord a => [a] -> [a] -> [a]
mergeLists [] = id
mergeLists l [] = l
mergeLists (x:xs) (y:ys) = if y < x
    then y : mergeLists (x:xs) ys
    else x : mergeLists xs (y:ys)

导致错误

MergeLists.hs:3:1: error:
    Equations for ‘mergeLists’ have different numbers of arguments
      MergeLists.hs:3:1-18
      MergeLists.hs:4:1-19
  |
3 | mergeLists [] = id
  | ^^^^^^^^^^^^^^^^^^...

如果有问题的行被重写为mergeLists [] l = l,则错误消失。

Haskell是否禁止在单个函数定义中混合使用无点和非自由子句?

1 个答案:

答案 0 :(得分:4)

通过此方法在Haskell中定义函数时,每个声明必须具有相同数量的参数。这是出于涉及可能的拼写错误的原因,以及更容易的模式匹配。

由于您的第一行只包含一个参数[],因此所有其他定义都包含两个参数,因此会导致错误。

这是禁止在这种特殊情况下混合尖头和无点样式,是的,但似乎是为了避免提到的拼写错误。