0
我想在haskell中使用where和let-in子句声明局部变量(这是在haskell情况下的正确术语?)。然而,每当我的条款是不是一个单一的线长,我总是得到一些解析错误:Haskell中let和in子句的正确语法
> 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.
代码:
0123试图加载下面的代码时出现以下错误> whereExample :: Int -> Int
> whereExample 0 = 0
> whereExample n = one * four * eight
> where one = 1
> four = 4
> eight = 8
在上述情况下使用let和where的正确方法是什么?
您的发布代码混合了制表符和空格,GHC将制表符视为8个空格,并且这会打破缩进。我建议打开警告'-Wall',这样编译器就会报告这个警告,所以你知道有什么问题。一个简单的解决方案是避免制表符。有关更多解决方案,请参阅http://dmwit.com/tabs/ – chi
**从不**混合选项卡和空格。它会在所有语言缩写显着的语言中打破代码。检查您的编辑器设置,并始终只使用制表符或仅使用空格(后者通常是首选)。 – Bakuriu
为了记录,在StackOverflow上显示的这些示例看起来具有完全正确的布局和语法。 –