自分なりのHaskellと圏論
- 以下の2つを書き直しているだけ
- Haskellと圏論(Wikibooks)
- これの噛み砕き版(こちら)
- Haskellと圏論(Wikibooks)
- Haskellと圏論
- Haskellが圏であることについて
- (純粋)関数型言語であるHaskellが圏として扱えるので、Haskellを成りたたせているもののすべてを、圏の構成要素に対応させてみる
- まず、純粋関数型言語の条件を挙げ、Haskellがその条件をどのように満たしているかを見てみる
- 次に、圏の構成要素とHaskellという純粋関数型言語の構成要素とを列挙し、その対応関係を確認する
- 純粋関数型言語Lの圏C(L)の構成要素
- C(L)は対象を持つ。Lの型をC(L)の対象とする
- HaskellではIntやDoubleや(Int -> Int)など
- C(L)は射を持つ。Lの操作(関数)をC(L)の射とする
- C(L)の射はソースとターゲットを持つ。Lの操作(関数)はある型をある型へと結ぶ。ソースとターゲットはLの型であり、C(L)の対象である
- Haskellの関数のすべて
- C(L)の射はソースとターゲットを持つ。Lの操作(関数)はある型をある型へと結ぶ。ソースとターゲットはLの型であり、C(L)の対象である
- C(L)の射は合成できる。射と合成してできる射には、ルールがある。Lの操作(関数)は合成できる。また、元の操作(関数)と合成してできる操作(関数)とにはルールがある
- Haskellでは関数の結合を(.)がある
- C(L)を考えるときには、恒等射が必要である。Lにも恒等関数がある
- Haskellでは id :: a -> aが恒等関数
- C(L)は圏と圏とを対応付ける関手を持つ。Lのデータ型(新たに作り出したデータ型のこと?、新たな型を含めてすべてのデータ型のこと?おそらく前者)で出来上がっているものも圏として扱えるが、このようにLが持つ2つの圏の対応付けができる
- C(L)は対象を持つ。Lの型をC(L)の対象とする
- モナドは?
- 純粋関数型言語Lの圏C(L)の構成要素