概要
- 純粋関数型言語
まとめ
単語
| 英語 | 日本語 | 解説 |
|---|---|---|
| Object | 対象 | Haskellの型。関数は対象でもあり射でもある! |
| Arror | 射 | 関数 |
| Category | 圏 | 対象と射の集まり。唯一の恒等射と、結合律が必要。Haskellの型と関数を対象、関数を射と見なすとHask圏ができる |
| デカルト閉圏 | 型が対象、関数が射、関数合成が射の合成、id関数が恒等射、と対応づけた関数型言語の圏 | |
| Functor | 関手 | 圏から圏への写像。関手則が必要。HaskellのFunctorに相当 |
| 自己関手 | 自分の圏から自分の圏への写像。 | |
| 自己関手圏 | を自己関手圏という | |
| Lifting | 持ち上げ | 普通の関数f(a -> m b)を,文脈に作用する関数に変換する演算f*(m a -> m b)にすること。この演算*をKleisli Starと呼び、Haskellでは>>=, bind演算子という |
| Monadic Expression | モナド式 | Monad m => m aのこと。 |
| Monad | モナド | 自己関手の圏におけるモノイド対象。 |
| fold | 畳み込み | 圏論では、catamorphism |
自然変換 代数的データ型自体もF始代数
モナド
- ファンクタの文脈
| 名前 | 文脈 |
|---|---|
| Maybe | 失敗可能性 |
| IO | 副作用演算 |
| [] | 非決定性計算 |
| State | 状態保持 |
- do文
- 中に書けるのは、
- モナド式
- パターン <- モナド式
- let { 宣言1 ; 宣言2 ; ... ; 宣言n }
- 中に書けるのは、
Tips
-
http://d.hatena.ne.jp/gintenlabo/20100601/1275396082
- C++ における Maybe 相当の機能は、果たして Boost.Optional だけなのでしょうか。少し考えると、実はポインタもまた Maybe であることが分かります。
- Boost には、既に Maybe に相当する Boost.Optional が存在する
- Boost.Optional は C++ でも屈指の便利ライブラリ
-
普通に書いてきたプログラムは、関数(集合写像)よりもクライスリ圏の射だって考えた方がいいよ
-
- そもそもモナドって何なんですか?はい、何なんでしょう?ここで、フィリップ・ワドラーの言葉を引用してみます。「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」
-
http://south37.hatenablog.com/entry/2014/04/20/%E3%83%A2%E3%83%8A%E3%83%89%E3%80%81%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E8%87%AA%E5%B7%B1%E9%96%A2 %E6%89%8B%E3%81%AE%E5%9C%8F%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%A2%E3%83%8E%E3%82%A4%E3%83%89