@@ -238,7 +238,7 @@ Alright. -- ここはユーザーによる入力
238
238
239
239
### ` do ` 記法の正体2: ` <- ` をなくす ` >>= `
240
240
241
- 今度は` do ` の中で単に命令を列挙するだけでなく 、` <- ` を使った変数への代入も、` do ` を使わないで書き換えてみましょう。
241
+ 今度は` do ` の中における単純な命令の列挙だけでなく 、` <- ` を使った変数への代入も、` do ` を使わないで書き換えてみましょう。
242
242
243
243
例として、次のように` getLine ` 取得した文字列を` line ` という変数に代入し、そのまま` putStrLn ` に渡す命令を書き換えます:
244
244
@@ -254,7 +254,7 @@ echo = do
254
254
echo = getLine >>= putStrLn
255
255
```
256
256
257
- ` line ` という変数右細い矢印 ` <- ` は消え、代わりに` >>= ` という演算子で` getLine ` と` putStrLn ` を繋げるようになりました。もちろん` do ` もありません。
257
+ ` line ` という変数と右細い矢印 ` <- ` は消え、代わりに` >>= ` という演算子で` getLine ` と` putStrLn ` を繋げるようになりました。もちろん` do ` もありません。
258
258
259
259
さて、` >>= ` とは何者なんでしょう?前節の` >> ` と同様に` >>= ` も演算子なので、いつもの` :t ` コマンドで、どのような型かが分かります:
260
260
@@ -263,7 +263,7 @@ ghci> :t (>>=)
263
263
(>>=) :: Monad m => m a -> (a -> m b ) -> m b
264
264
```
265
265
266
- またしても`Monad `が出てきました。 `Monad `の話は後回しにしたいので、 `>> `の時と同様に、 `TypeApplications `で型変数`m` を`IO `に置き換えておきましょう:
266
+ またしても`Monad `が出てきました。 `Monad `の話は後回しにしたいので、 `>> `の時と同様に`TypeApplications `で型変数`m` を`IO `に置き換えておきましょう:
267
267
268
268
```haskell
269
269
ghci> : t (>>=) @ IO
@@ -278,17 +278,17 @@ ghci> :t (>>=) @IO
278
278
-- 比較しやすさのために、記号の位置を適当に揃えています
279
279
```
280
280
281
- ` >> ` と違って第二引数が関数 ` a -> IO b ` になっているのがポイント。
281
+ ` >> ` と異なり、第二引数(右辺)の型が関数 ` a -> IO b ` になっている点がポイントです。2つの引数と戻り値の型はそれぞれ次の通りです:
282
282
283
- 2つの引数と戻り値:
283
+ - 第1引数(左辺)の` IO a ` : 第二引数の関数` a -> IO b ` の、** 引数** と同じ型` a ` の値を返す` IO ` (命令)。
284
+ - 第2引数(右辺)の` a -> IO b ` : 何か(` IO ` でない、普通の)値` a ` を受け取って、命令` IO b ` を返す。
285
+ - 戻り値の` IO b ` : 第二引数の関数` a -> IO b ` の、** 結果** と同じ型` b ` の値を返す` IO ` (命令)。
284
286
285
- - ` IO a ` : 第二引数の関数` a -> IO b ` の、** 引数** と同じ型` a ` の値を返す` IO ` (命令)。
286
- - ` a -> IO b ` : 何か(` IO ` でない、普通の)値` a ` を受け取って、命令` IO b ` を返す。
287
- - ` IO b ` : 第二引数の関数` a -> IO b ` の、** 結果** と同じ型` b ` の値を返す` IO ` (命令)。
287
+ まとめると` >>= ` は、「左辺の命令の実行結果を受け取って、右辺の『命令を返す関数』につなげて、続けて実行する命令」を返す演算子と言えます。
288
288
289
- 「左辺の命令の実行結果を受け取って、右辺の『命令を返す関数』につなげて、続けて実行する命令」を返す演算子
289
+ 先程の例、 ` echo ` 関数における ` >>= ` の左辺・右辺・戻り値の型がそれぞれどう当てはめられているか見てみましょう。 ` echo ` 関数は次のように ` getLine ` と ` putStrLn ` 関数を ` >>= ` に渡していました:
290
290
291
- ```
291
+ ``` haskell
292
292
echo = getLine >>= putStrLn
293
293
```
294
294
0 commit comments