Coyoneda って…… お前 functor がデータ構造になっただけやんけ!!
operational (あるいは freer) と呼ばれているものの説明として,
- a)
Coyoneda
を使うと,kind が* -> *
であるような任意の型から functor を作り出せる- 任意の型
f :: * -> *
についてCoyoneda f
はFunctor
のインスタンスになる
- 任意の型
- b)
Free
を使うと,任意の functor から monad を作り出せるFunctor
のインスタンスである任意の型f
についてFree f
はMonad
のインスタンスになる
- a と b を組み合わせると,適当な型
f :: * -> *
から monad を作り出せて便利〜🙌
というストーリーが往々にして語られる*1.