【发布时间】:2016-05-18 00:15:50
【问题描述】:
我正在尝试使用 where 和 let-in 子句在 haskell 中声明局部变量(在 haskell 的情况下这是正确的术语吗?)。但是,每当我的子句超过一行时,我总是会遇到一些解析错误:
> letExample :: Int -> Int
> letExample 0 = 0
> letExample n =
> let one = 1
> four = 4
> eight = 8
> in one*four*eight
当尝试将上述代码加载到 ghci 中时,出现以下错误:
letexample.lhs:4:33:
parse error in let binding: missing required 'in' Failed, modules loaded: none.
尝试加载以下代码时出现以下错误:
whereexample:5:57: parse error on input ‘=’
Failed, modules loaded: none.
代码:
> whereExample :: Int -> Int
> whereExample 0 = 0
> whereExample n = one * four * eight
> where one = 1
> four = 4
> eight = 8
在上述情况下,使用 let 的正确方法是什么?
【问题讨论】:
-
您发布的代码混合了制表符和空格,GHC 将制表符视为 8 个空格,这会破坏缩进。我建议打开警告
-Wall,以便编译器报告这一点,这样你就知道有问题了。一个简单的解决方案是避免使用制表符。更多解决方案见dmwit.com/tabs -
从不混合制表符和空格。它会破坏所有缩进很重要的语言的代码。检查您的编辑器设置,要么始终只使用制表符,要么只使用空格(通常首选后者)。
-
作为记录,StackOverflow 上显示的这些示例似乎具有完全正确的布局和语法。
-
正确的术语是绑定,而不是变量。
-
感谢@AlexeyKuleshevich
标签: haskell syntax where-clause parse-error let