建议的 ScopedTypeVariables 在模式类型签名中
Suggested ScopedTypeVariables In a pattern type-signature
我开始编写 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
在模式类型签名中
然而,另一个功能 - 复制我已经用类似的方式编写,编译并运行良好。
我可以用另一种方式写斐波那契数列,但我想知道错误是什么
你的程序中的缩进是错误的,Whosebug 对制表符的奇怪处理使得你问题中的缩进以不同的方式出错。
你的程序应该这样缩进:
fibo :: (Num z, Ord z) => z -> z
fibo d
| d <= 0 = 0
| ...
前两行应从同一列开始,带有警卫的行应比那些行缩进更多。
您问题中显示的程序错误的方式与您提到的错误不同:带有警卫的行必须比前面的行缩进更多。发生这种情况是因为 Whosebug 对制表符的处理方式不标准。不要使用制表符。
您的错误与 GHC 查看您的程序的缩进方式一致:
fibo :: (Num z, Ord z) => z -> z
fibo d -- wrong, must start in same column as previous line
| d <= 0 = 0
| ...
我们可以重建你原来的程序一定是
<sp><sp><sp><sp>fibo :: (Num z, Ord z) => z -> z
<tab> fibo d
<tab> | d <= 0 = 0
<tab> | ...
不要使用制表符。
我开始编写 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 在模式类型签名中
然而,另一个功能 - 复制我已经用类似的方式编写,编译并运行良好。 我可以用另一种方式写斐波那契数列,但我想知道错误是什么
你的程序中的缩进是错误的,Whosebug 对制表符的奇怪处理使得你问题中的缩进以不同的方式出错。
你的程序应该这样缩进:
fibo :: (Num z, Ord z) => z -> z fibo d | d <= 0 = 0 | ...
前两行应从同一列开始,带有警卫的行应比那些行缩进更多。
您问题中显示的程序错误的方式与您提到的错误不同:带有警卫的行必须比前面的行缩进更多。发生这种情况是因为 Whosebug 对制表符的处理方式不标准。不要使用制表符。
您的错误与 GHC 查看您的程序的缩进方式一致:
fibo :: (Num z, Ord z) => z -> z fibo d -- wrong, must start in same column as previous line | d <= 0 = 0 | ...
我们可以重建你原来的程序一定是
<sp><sp><sp><sp>fibo :: (Num z, Ord z) => z -> z <tab> fibo d <tab> | d <= 0 = 0 <tab> | ...
不要使用制表符。