我刚刚学习Haskell,我决定尝试编写自己的pred
版本,它返回参数前面的数字。我正在使用WinGHCi并加载一个名为test.hs
的文件。这是我的代码:
prev :: (Num a) => a -> a
prev x = prev' 0 x
where prev' y z
| (succ y) == z = y
| otherwise = prev' (succ y) z
我收到错误:
test.hs:4:5:
parse error (possibly incorrect indentation or mismatched brackets)
如何使用警卫正确编写辅助函数?
答案 0 :(得分:2)
您的图案防护需要更深入缩进 - 它们需要比p
定义中的prev'
更靠右边。此版本不提供解析错误:
prev :: (Num a) => a -> a
prev x = prev' 0 x
where prev' y z
| (succ y) == z = y
| otherwise = prev' (succ y) z
你仍然在那里得到一个类型错误,但需要更多类型类约束。