Functors

 Functors

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

B3b78ba1acbf09ba202987d2d93ab72f?s=128

Kevin McCarthy

June 21, 2015
Tweet

Transcript

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

    what's the problem?
  2. None
  3. The magic of functional composition

  4. add2(1) add2(x) = x + 2 3

  5. sub1(add2(1)) sub1(x) = x - 1 2

  6. crunch(5) crunch(x) = sub1(add2(x)) 6

  7. crunch(5) crunch = sub1 . add2 6

  8. crunch([1,2,3]) WTF?????

  9. FUNCTORS

  10. fcrunch([1,2,3]) fcrunch = fmap crunch [2,3,4]

  11. class Functor f where fmap :: (a -> b) ->

    f a -> f b
  12. 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”.
  13. *> :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
  14. instance Functor [] where fmap _ [] = [] fmap

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

    g (Just a) = Just (g a)
  16. •[] •Tree •Map •Sequence •Maybe •IO

  17. MATH TIME

  18. –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”
  19. Categories are bags of stuff that hold: • Objects •

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

    Functions Code
  21. add2 sub1 Number f add2 f sub1 f Number Functor

  22. add2 sub1 10 fmap add2 fmap sub1 [10] [] LIFT

  23. FUNCTOR RULES Math

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

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

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