【问题标题】:Haskell Parse Error in Helper Function辅助函数中的 Haskell 解析错误
【发布时间】:2013-12-31 02:37:14
【问题描述】:

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

如何正确编写一个带守卫的辅助函数?

【问题讨论】:

标签: haskell


【解决方案1】:

你的模式守卫需要更深的缩进——它们需要比prev'定义中的p更靠右。这个版本不给出解析错误:

prev :: (Num a) => a -> a
prev x = prev' 0 x
  where prev' y z
            | (succ y) == z = y
            | otherwise = prev' (succ y) z

不过,您仍然会遇到类型错误 — 需要更多类型类约束。

【讨论】:

  • 感谢您的精彩回答!类型类约束是什么意思?
  • 我明白了 - 我需要将 (Num a) 替换为 (Integral a) 之类的东西,以便它可以测试是否相等。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多