Haskell 模式类型签名中建议的ScopedTypeVariables
我开始写Haskell代码。 我试着用警卫写一个斐波那契函数-Haskell 模式类型签名中建议的ScopedTypeVariables,haskell,pattern-guards,Haskell,Pattern Guards,我开始写Haskell代码。 我试着用警卫写一个斐波那契函数- fibo :: (Num z, Ord z) => z -> z fibo d | d <= 0 = 0 | d == 1 = 1 | otherwise = fibo (d-1) + fibo (d-2) fibo::(Num z,Ord z)=>z->z 菲波d |d z->z fibo d' 也许您打算使用ScopedTypeVariables 在模式类型签名中 然而
fibo :: (Num z, Ord z) => z -> z
fibo d
| d <= 0 = 0
| d == 1 = 1
| otherwise = fibo (d-1) + fibo (d-2)
fibo::(Num z,Ord z)=>z->z
菲波d
|d z->z fibo d'
也许您打算使用ScopedTypeVariables
在模式类型签名中
然而,我以类似的方式编写了另一个函数-replicate,它编译和运行良好。
我可以用另一种方式写斐波那契,但我想知道错误是什么程序中的缩进是错误的,StackOverflow对制表符的奇怪处理以另一种方式使问题中的缩进错误
您的程序应按如下方式缩进:
fibo :: (Num z, Ord z) => z -> z
fibo d
| d <= 0 = 0
| ...
fibo :: (Num z, Ord z) => z -> z
fibo d -- wrong, must start in same column as previous line
| d <= 0 = 0
| ...
fibo::(Num z,Ord z)=>z->z
菲波d
|d您的程序中的缩进是错误的,StackOverflow对制表符的怪异处理使您的问题中的缩进以不同的方式出错
您的程序应按如下方式缩进:
fibo :: (Num z, Ord z) => z -> z
fibo d
| d <= 0 = 0
| ...
fibo :: (Num z, Ord z) => z -> z
fibo d -- wrong, must start in same column as previous line
| d <= 0 = 0
| ...
fibo::(Num z,Ord z)=>z->z
菲波d
|d您能否在fibo
定义上方包含上下文?为什么缩进?在GHC 7.10之前的版本中,请使用-fwarn tabs
。在最近的GHC中,请注意此警告,它现在默认启用。而且不要使用tabs.BTW,无论如何,您应该启用ScopedTypeVariables
,并学会使用它。这是一个非常有用和友好的扩展。你能在fibo
定义上面包含上下文吗?为什么缩进?在GHC 7.10之前的版本中,请使用-fwarn tabs
。在最近的GHC中,请注意此警告,它现在默认启用。而且不要使用tabs.BTW,无论如何,您应该启用ScopedTypeVariables
,并学会使用它。这是一个非常有用和友好的扩展。