ComonadTrans
не очень важно для понимания cohoist
, что похоже на версию карты более высокого порядка.
map
можно переформулировать, переворачивая аргументы, как
[A, B](A => B) => (F[A] => F[B])
Другими словами, функция поднимается до F
. ~>
это просто
F ~> G
[A]F[A] => G[A]
С этим вы можете расширить подпись cohoist
[M[_], N[_]: Comonad]([A]M[A] => N[A]) => ([A]F[M, A] => F[N, A])
(два A
нельзя объединить и перетащить в начальный список tparam; я не хочу вдаваться в подробности здесь, кроме слов "это не сработает")
Так же, как и map, она поднимает функцию (преобразователь M в N) в F
, превращая преобразователь «F из M» в «F из N».