I don't like any of those names. matryoshka.∘
is compose
for types, so why are we using the "map" operator? Just because there's no suitable "dot"?
Furthermore Delay
is applying its second argument. So really wouldn't it make more sense to have these?
type Curry[F[_], G[_]] = G ~> (F ∘ G)#λ
type Flip[F[_], G[_]] = (F ∘ G)#λ ~> (G ∘ F)#λ // But that probably makes no sense.