辅助函数中的Haskell解析错误

时间:2013-12-31 02:37:15

标签: haskell

我刚刚学习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)

如何使用警卫正确编写辅助函数?

1 个答案:

答案 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

你仍然在那里得到一个类型错误,但需要更多类型类约束。