少しずつ説明。
- 構文範疇に、式と文〈ステートメント〉がある。
- 文には式文(式はそのまま文)と副作用let文がある。
- do構文は式(do式)、純let式も式
- let文といったときは副作用let文で、let式は純let式。
翻訳:
- do式の翻訳は、そのボディブロックを翻訳して結果とする。doキーワード自体は単なる開始マーカー。
- 翻訳結果は、クライスリ射になる。
- 式文は、何もしないでそのまま結果とする。
- 式文の翻訳は何もしないので、式文はもともとクライスリ射でなくてはならない。
- let文は、代入右辺文を翻訳して、本体の翻訳にクライスリ適用(>>=)する。
省略記法:
- 純let式と副作用let文の中間に、代入右辺式が純なlet文がある。割り当て記号に := を使ってdo文脈内でletを使うと、代入右辺式がpureで修飾されてから代入が実行される。それ以外は何もしない。
- シーケンサー制御構造のコロンまたは改行は、先行する式が、後続する式内に登場する変数を副作用let束縛して実行するlet文に翻訳される。
注意事項:
- letが、(1)純let式(doブロックの外)、(2)副作用let文(左矢印)、(3)代入が純な(副作用がない)let文(:=)の三種類がある。
- letの意味が、doブロックの外と中では変更されている。
- doブロックは、全体として1つのクライスリ射になる。
- セミコロンまたは改行は、クライスリ射のクライスリ結合を意味する。