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
質問は次のとおりです。
- ここで何が起きてるの?余分な行が役立つのはなぜですか?
- コードをコンパイルするための非ハッキーな方法は何ですか?