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 of lifting function, 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