2020-09-19: なんも分からん
やったこと
Scala
Cogenの型について考察している。
ひどく抽象化するとこんな感じ。
trait Co[F[_], A] {
def co[B](fb: F[B]): F[A => B]
}
この型を使うと、Functor・ContravariantからContravariant・Functorが導出できたりする。
対応はこんな感じ。Dividibleは反変なApplicativeで、Decidableは反変なAlternative。
Functor[F] => Contravariant[Co[F, *]], Dividible[Co[F, *]]Applicative[F] => Decidable[Co[F, *]]Contravariant[F] => Functor[Co[F, *]], Applicative[Co[F, *]]Dividible[F] => Alternative[Co[F, *]]
つまり、関手があればそれらを反変させた関手とその関手の上での積が定義できて、さらに元の関手で積が定義されていれば和が定義できる。
積が自然に(ネストで)定義されていて、積が和になる、という意味でこれは指数関数に似ている。
まあBを任意に取れるようにして関数を返しているのだから、当然と言えば当然な気もするけど。
なんかCoっていうよりもっとしっくりくる名前がある気がするんだよなぁ。