前回の続きです。Qiita内の圏論エントリを読んでいきます。ストック数が多いものに着目しています。
復習 モナド
一部誤りがありますので、参照するときは注意が必要です。
a -> b の a の方を『ドメイン domain』、 b の方を『余ドメイン codomain』と呼ぼう。
ドメインと余ドメインを持っていて合成できるものを『射 morphism』、その全体を『圏 category』と呼ぶ。圏論は圏や射についての理論。
圏論の言葉を正しく使っています。
関数の圏の対象からコンテナ型の関数の圏の対象への関数 a -> f a は『対象関数 object function』、関数からコンテナ型の関数への写像 (a -> b) → (f a -> f b) は『射関数 mapping function』にあたる。関手はこの2つの関数から成り立っている。
対象関数についての記述が誤っています。 class Functor f where ...
の f
が対象関数です。
代数的データ型の「代数」 is 何
正しいことが書かれているエントリです。
ならば(NatF(Int), l)と(NatF(String), v)はNatF-代数です.
挙げられている例は適切です。厳密に言えば instance Functor NatF
が必要だったり (Int, l)
の組がNatF-代数だったりしますがとるに足らぬことでしょう。
((List a), cons)が始代数であることが示せました.
示している内容も話の流れも適切であると感じました。
Contravariant なんて要らんかったんや!
正しいエントリかと思います。
Bifunctor も直積圏を定義すれば Functor に収容できるけど、newtype とか型注釈とか乱れ飛んでウザい。
同意します。
綱渡りと Category (と,Kleisli)
正しい内容が書かれたエントリかと思います。
Kleisli m が「本当に」 Category のインスタンスであるためには,Category 則を満たす必要があります.
確認している内容も適切です。