You may find it easier to see if you flip types around:
(e -> a) -> (a -> b) -> (e -> b)
We can turn a e into a , a a into b . So how can we turn e into b ?
Do not pay too much attention to "lifting"; with Functor instances, the best way to discover an implementation is to simply follow the type.
source share