A lei da naturalidade afirma que:
t . traverse f == traverse (t . f) -- for every applicative transformer t
Agora, para o RHS da lei, se f tem o tipo Applicative a => x -> a y
, então t deve ser do tipo (Applicative a, Applicative b) => a y -> b y
, devido à composição da função.
Para LHS, travessia f tem o tipo (Applicative a, Traversable c) => c x -> a (c y)
. Mas como a travessia f é composta com t. transversal f, t deve ser do tipo (cx -> a (cy)) -> b y.
Agora, para o LHS, t tem o tipo a (cy) -> by, mas a partir do RHS, ele tem o tipo ay -> b y. Como é que a lei soa sob uma perspectiva de tipo?
Editar: corrigido o tipo t no LHS