Source: Hutton, Graham. "Programming in Haskell" (p. 210)
In addition to providing the functions
pureand<*>, applicative functors are also required to satisfy four equational laws:
x <*> (y <*> z) = (pure (.) <*> x <*> y) <*> z
I calculated this type pure (.) :: f ((b -> c) -> (a -> b) -> (a -> c))
However, that doesn't seem correct. Could someone explain why?