在此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
,但这是因为交互提示的行为与文件中的程序的行为不同。