1
は、次のコードを考えてみましょう:これはdo表記の解析エラーですか?
foo = do
let bar = do
baz
bar
それはghc
に解析されない、バージョン8それはbaz
を含む行について不平を言います。しかし、このコードは解析します。
foo = do
let bar = do
baz
bar
これはわかりにくいです。 2つのバージョンの本質的な違いは何ですか?
なぜ2つのスペースが 'do'ブロックの一部になっていないのですか?値は割り当てられていないので、 'let'の直接の一部ではないことに注意してください。 – Turion
@Turion Haskellのレイアウトルールでは、「let」または「where」のRHS上のすべてがLHS上のパターンの最初の列まで少なくとも*インデントされる必要があります。あなたの最初の例では、 'baz'は' bar'までインデントされていませんが、これは大丈夫ではありませんが、2番目の例ではそうです。 –