「48時間でSchemeを書こう」の版間の差分

削除された内容 追加された内容
sectionを仮に追加
59 行
# <code>action2</code>
最初の形は<code>action1</code>の結果を後続のアクションで使えるよう<code>name</code>に束縛します。例えば、もし<code>action1</code>の型が<code>IO [String]</code>(<code>getArgs</code>のように文字列のリストを返すIOアクション)なら、<code>name</code>は"bind"演算子<code>>>=</code>によって後続の全てのアクションで持ち回される文字列のリストに束縛されます。二つ目の形はただ<code>action2</code>を実行し、もしあれば次の行に<code>>></code>演算子を使ってそれを渡します。bind演算子はそれぞれのモナドで異なる意味を持ちます。IOモナドでは、それはアクションの結果である外的な副作用を働きながらアクションを順番に実行します。bind演算子の意味付けは特定のモナドに依存するので、一つのdoブロックの中に異なるモナド型の動作を混在させることはできません。この場合なら、IOモナドのみ使用可能です。
 
もちろん、これらアクションはそれ自身関数や他の複雑な式を呼び出し、(<code>return</code>関数を呼ぶかそれを呼ぶ関数を呼び出すことで)その値を受け渡していくことができます。この例では、まず引数リストの最初の要素(インデックス0番目、<code>args !! 0</code>)を取り、文字列<code>"Hello, "</code>の末尾にそれを繋げ(<code>"Hello, " ++</code>)、そして最後にその結果を<code>putStrLn</code>に渡すと、doブロックのパイプに組み込まれる新しいIOアクションが返されます。
 
== Parsing ==