Category
単位元と結合演算を持つ最も基本的な構造としてMonoidがあり、そこに関数適用のできるパラメータを追加するとApplicativeになる。さらにパラメータを追加し、しりとりのように結合できるようにしたのがCategoryだ。
code:haskell
class Category cat where
id :: cat a a
(.) :: cat b c -> cat a b -> cat a c
関数型->が代表的なインスタンスとなるほか、型の同値性を表す型:~:や、newtype Const' a b c = Const' { getConst' :: a }なども自明なインスタンスが定義できる。
インスタンスが少なく、ほとんどが自明と思われがちだが、type aligned sequenceと呼ばれる関数を並べたキューのような非自明な例も存在し、Freeモナドの実装に応用されている: https://github.com/ekmett/free/blob/categories/src/Control/Category/Free/Cat.hs#L74
派生クラスとしてArrowが存在する。
#クラス