在 Haskell 文件中"let"末尾解析错误



在此Haskell代码中,您可以在" B2"的末尾看到什么错误?我相信没有错误,但是文件q3.hs中的代码:

let idPnumber a1 b2= take 3 a1 == take 3 b2

给出错误:

Q3.hs:1:45: error:
    parse error (possibly incorrect indentation or mismatched brackets)
  |
1 | let idPnumber a1 b2= take 3 a1 == take 3 b2 
  |                                             ^

如果要编译一个Haskell源文件,例如Q3.hs,则该程序的"顶级"功能的定义需要具有看起来像这样的语法:

idPnumber a1 b2= take 3 a1 == take 3 b2

没有任何let。相反,函数中使用 let为表达式命名,例如:

idPnumber a1 b2 = let threeA1 = take 3 a1
                      threeB2 = take 3 b2
                  in  threeA1 == threeB2

和 - 在这种情况下 - 必须遵循in子句。(还可以使用let的其他一些方法,这些方法不需要in,但这些方法不适用。(

由于您的文件中缺少in关键字,因此GHC无可救药地感到困惑,并给您提供了一条错误消息,这没有太多意义。(如果添加了in子句,您仍然会收到一个错误消息,但它可以解释GHC正在寻找"顶级声明",这是上述没有任何let关键字的定义。

请注意,您 can 在GHCI Interactive提示中使用这样的let,但这是因为交互提示的行为与文件中的程序的行为不同。

相关内容

  • 没有找到相关文章

最新更新