A Setter a b c d is a generalization of fmap from Functor. It allows you to map into a
structure and change out the contents, but it isn't strong enough to allow you to
enumerate those contents. Starting with fmap :: Functor f => (c -> d) -> f c -> f d
we monomorphize the type to obtain (c -> d) -> a -> b and then decorate it with Identity to obtain