The following excerpt on Functors is a really nice explanation:

class Functor f wherefmap :: (a -> b) -> f a -> f b

We can think of fmap as a kind ofliftingfunction, as we introduced in "Avoiding Boilerplate with Lifting" on page 223. It takes a function over ordinary values a -> b, and lifts it to become a function over containers f a -> f b, where f is the container type.

I think that viewing f as a container type is a great introduction to Functors. I find it more accessible than the other explanation I've seen, which I talk about in this post. Not that the other way isn't useful in it's own right, but I think I would have picked things up faster if I had seen this explanation first.

## No comments:

## Post a Comment