Applicativeを

pure :: Identity ~> f
apply :: Day f f ~> f

と捉えて、その相対を

copure :: f ~> Identity
coapply :: f ~> Day f f

としたものを考えていたのだが、

これ、Comonadを含意する

「MonadはApplicativeを含意する」という方向とは逆になっている。「"Applicativeの双対"はComonadを含意する」

フォロー

これはHaskellのすべてのFunctor fに
dayToCompose :: Day f f a -> f (f a)
が実装できるから。

join :: f (f a) -> f a
から
apply :: Day f f a -> f a
apply = join . dayToCompose
が作れるのとは逆に、

coapply :: f a -> Day f f a
から
duplicate :: f a -> f (f a)
duplicate = dayToCompose . coapply
が作れる

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。