【发布时间】:2015-12-16 16:00:48
【问题描述】:
我开始编写 Haskell 代码。 我尝试使用 Guards 编写斐波那契函数 -
fibo :: (Num z, Ord z) => z -> z
fibo d
| d <= 0 = 0
| d == 1 = 1
| otherwise = fibo (d-1) + fibo (d-2)
我收到了这个错误:-
非法类型签名:'(Num z, Ord z) => z -> z fibo d' 也许您打算使用 ScopedTypeVariables 在模式类型签名中
但是另一个函数 - 复制我以类似的方式编写,编译和工作正常。 我可以用另一种方式写斐波那契,但我想知道错误是什么
【问题讨论】:
-
您能否在
fibo定义上方包含上下文?为什么要缩进? -
在 7.10 之前的 GHC 中,使用
-fwarn-tabs。在最近的 GHC 中,请注意此警告,现在默认启用。并且不要使用标签。 -
顺便说一句,你可能应该启用
ScopedTypeVariables,并学习使用它。这是一个非常有用且友好的扩展。