Skip to content

Commit

Permalink
Complete the brief introduction of Monad
Browse files Browse the repository at this point in the history
  • Loading branch information
igrep committed Aug 18, 2024
1 parent 5ad9003 commit dfef39d
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions assets/19.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# `do`における変数への代入を抑える 1

課題4のアプリケーションを、`<-`もカッコも使わずに書き換えましょう。
今回も&純粋にリファクタリングをしてください。特に振る舞いを変える必要はありません。
課題4のアプリケーションを、`<-`もカッコも使わずに書き換えましょう。今回も&純粋にリファクタリングをしてください。特に振る舞いを変える必要はありません。

## 必要な知識

Expand Down Expand Up @@ -87,22 +86,21 @@ instance Monad ((->) r) -- Defined in ‘GHC.Base’
instance Monoid a => Monad ((,) a) -- Defined in ‘GHC.Base’
```

なんかたくさんある
何だかたくさん出力されましたねここで注目して欲しいのは最後の方に書かれている

特に注目して欲しいのは

```
```haskell
instance Monad IO -- Defined in ‘GHC.Base’
```

と書かれていること。
つまり、これまで何度も使ってきた`IO`は`Monad`型クラスのインスタンス(そして、ほかにも`Monad`のインスタンスはたくさんある)
という行ですこれは`IO`型が`Monad`型クラスのインスタンスであることを示していますこれまで何度も使ってきた`IO`型本入門の言葉で言うところの命令は`Monad`の一つなのです

そして前述のGHCiの`:i Monad`の結果から察せられるとおり`Monad`型クラスのインスタンスは他にもたくさんあることも頭の片隅に置いておいて下さい他のインスタンスについては次の次の課題hoge(21?)で触れますので乞うご期待

ここまでのポイントは以下の通り
ここまでのポイントは以下の通りです:

- `Monad`は型クラス
- `>>`は、`Monad`型クラスのインスタンス全般に対して使える多相関数(演算子)
- 今まで使ってきた、`putStrLn`や`getLine`が返す`IO`も`Monad`のインスタンス
- `Monad`は型クラス
- `>>`は`Monad`型クラスのインスタンス全般に対して使える関数演算子
- 今まで使ってきた`putStrLn``getLine`が返す`IO`命令も`Monad`のインスタンス

##### GHCの言語拡張`TypeApplications`で、分かりやすく見てみる

Expand Down

0 comments on commit dfef39d

Please sign in to comment.