Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么这是do符号中的解析错误?_Haskell_Syntax_Parse Error_Let_Do Notation - Fatal编程技术网

Haskell 为什么这是do符号中的解析错误?

Haskell 为什么这是do符号中的解析错误?,haskell,syntax,parse-error,let,do-notation,Haskell,Syntax,Parse Error,Let,Do Notation,考虑以下代码: foo = do let bar = do baz bar 它不在ghc第8版中解析。它抱怨包含baz的行。但是,此代码不会解析: foo = do let bar = do baz bar 我觉得这令人困惑。这两个版本之间的本质区别是什么?问题是在无人区的缩进放置baz。它的缩进程度不足以成为let表达式的一部分,但它的缩进程度太大,无法成为包含let表达式的do表达式的下一部分。问题是缩进将baz置于无人地带。它的缩进程度不足以成为le

考虑以下代码:

foo = do
  let bar = do
    baz
  bar
它不在ghc第8版中解析。它抱怨包含
baz
的行。但是,此代码不会解析:

foo = do
  let bar = do
      baz
  bar

我觉得这令人困惑。这两个版本之间的本质区别是什么?

问题是在无人区的缩进放置
baz
。它的缩进程度不足以成为
let
表达式的一部分,但它的缩进程度太大,无法成为包含
let
表达式的
do
表达式的下一部分。

问题是缩进将
baz
置于无人地带。它的缩进程度不足以成为
let
表达式的一部分,但它的缩进程度太大,不足以成为包含
let
表达式的
do
表达式的下一部分。

为什么两个空格不足以使它成为
do
块的一部分?请注意,它不是
let
的直接部分,因为没有给它赋值。@Turion Haskell的布局规则要求
let
的右侧上的所有内容至少缩进到左侧上图案的第一列。在第一个示例中,
baz
没有缩进到
bar
,这是不正确的,但在第二个示例中是。为什么两个空格不足以使其成为
do
块的一部分?请注意,它不是
let
的直接部分,因为没有给它赋值。@Turion Haskell的布局规则要求
let
的右侧上的所有内容至少缩进到左侧上图案的第一列。在第一个示例中,
baz
没有缩进到
bar
,这是不正确的,但在第二个示例中是正确的。