3

The value of xyz is undefined here, so reference is not allowed.do 表記とともに、コンパイラ エラー メッセージに関する説明を探しています。例を十分に一般化することができませんでした。私が与えることができるのは、この動作に出くわした具体的な例だけです。そのために残念。

purescript-parsingを使用して、ネストされた複数行コメントを受け入れるパーサーを書きたいと思います。例を単純化するために、各コメントは で始まり、(で終わり、または別のコメント)を含むことができます。aいくつかの例:(a)そして((a))受け入れられる、()(aまたはfoo拒否される。

The value of comment is undefined here, so reference is not allowed.次のコードでは、次の行でエラーが発生しcontent <- string "a" <|> commentます。

comment :: Parser String String
comment = do
  open <- string "("
  content <- commentContent
  close <- string ")"
  return $ open ++ content ++ close

commentContent :: Parser String String
commentContent = do
  content <- string "a" <|> comment
  return content

その上に行を挿入することでエラーを取り除くことができます。content <- string "a" <|> comment私が理解している限り、結果のパーサーはまったく変更されません。

commentContent :: Parser String String
commentContent = do
  optional (fail "")
  content <- string "a" <|> comment
  return content

質問は次のとおりです。

  • ここで何が起きてるの?余分な行が役立つのはなぜですか?
  • コードをコンパイルするための非ハッキーな方法は何ですか?
4

1 に答える 1