:: (a -> b) -> [a] -> [b]
`map f xs` applies the function `f` to all elements of the list `xs`
and returns the list of results (in the same order as `xs`).
`fmap` takes a function of type `a -> b`, and turns it into a
function of type `f a -> f a`, where `f` is the type which is an
instance of `Functor`.
For example, `map` is an `fmap` that only works on lists.
It takes a function `a -> b` and a `[a]`, and returns a `[b]`.
Map a function over a functor. Given a value `as` and a function
`f`, `as <&> f` is `f <$> as`. That is, `<&>` is like `<$>` but the
arguments are in reverse order.