为什么Haskell禁止使用“不同数量的参数”

时间:2017-11-04 18:19:05

标签: haskell types

我在Haskell玩游戏并编写了以下代码

d::Integer->Integer
d 4=7
d=(*2)

Try it online!

在我看来,当输入为4时,应返回7,否则返回两倍。然而有点令我惊讶的是,这甚至都没有编译,它给出了GHC中的错误:

Equations for ‘d’ have different numbers of arguments

现在在某些方面编译器是正确的,d的两个定义确实有不同数量的参数,但它们都有一个参数(第一个要求它是Eq和{{ 1}},而第二个只需要Num)并生成Num类型的成员。

Num

原则上我认为编译器没有理由不允许这样做。

为什么编译器会在这里给出错误?这样做的好处/设计理念是什么?

这不是一个调试问题,我知道这个问题,我知道如何解决它,这是代码的工作版本作为证据。

 ⚙ > ~/projects > ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Prelude> f 4=7
Prelude> :t f
f :: (Eq a, Num a, Num p) => a -> p
Prelude> g=(*2)
Prelude> :t g
g :: Num a => a -> a
Prelude>

Try it online!

0 个答案:

没有答案