Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Functors

 Functors

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

Kevin McCarthy

June 21, 2015
Tweet

More Decks by Kevin McCarthy

Other Decks in Programming

Transcript

  1. 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”.
  2. *> :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
  3. instance Functor [] where fmap _ [] = [] fmap

    g (x:xs) = g x : fmap g xs -- or we could just say fmap = map
  4. –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”
  5. BROKEN FUNCTOR instance Functor [] where fmap _ [] =

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