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.