Kevin McCarthy
June 21, 2015
120

# Functors

Part 1 of the Functors, Monoids, and Monads presentation here: http://www.meetup.com/dynamic/events/222501291/

June 21, 2015

## Transcript

1. ### A monad is a monoid in the category of endofunctors,

what's the problem?

f a -> f b
11. ### fmap transforms a “normal” function (g :: a -> b)

into one which operates over containers/contexts (fmap g :: f a -> f b). This transformation is often referred to as a lift; fmap “lifts” a function from the “normal world” into the “f world”.
12. ### *> :t add2 add2 :: Num a => a ->

a *> :t crunch crunch :: Num a => a -> a *> :t fcrunch fcrunch :: (Functor f, Num b) => f b -> f b
13. ### instance Functor [] where fmap _ [] = [] fmap

g (x:xs) = g x : fmap g xs -- or we could just say fmap = map
14. ### instance Functor Maybe where fmap _ Nothing = Nothing fmap

g (Just a) = Just (g a)

17. ### –Wikipedia “In mathematics, a functor is a type of mapping

between categories, which is applied in category theory. Functors can be thought of as homomorphisms between categories”
18. ### Categories are bags of stuff that hold: • Objects •

Morphisms Math
19. ### Categories are bags of stuff that hold: • Types •

Functions Code

23. ### FUNCTOR RULES •fmap id x = x •fmap(g.h) = (fmap

g).(fmap h) Code
24. ### BROKEN FUNCTOR instance Functor [] where fmap _ [] =

[] fmap g (x:xs) = g x : g x : fmap g xs