Feel free to check out the coop missions in SC 2 . <| sep |> You are right that it is difficult to extract and explain a single piece of the puzzle without seeing the rest . Thinking about unit vs new , in the context of PHP , I think you are right . Re fmap it is important to understand that fmap is a generic function , hence it can be composed with other functions , etc . while $ Fmap $ fn depends on $ F . Re List I don ' t know whether , again in the context of PHP , it helps understanding given it ' s already built in the language . Anyway , here it is class L extends ArrayObject implements Functor public function mapcallable $ fn return new Larraymap $ fn , array $ this vardumpfmap $ add 1 , new L 1 , 2 , 3 L 2 , 3 , 4 Re IO , another way to understand Functor is that it abstracts away function application . This is how IO works , namely it doesn ' t apply functions , it composes them for later application and thus builds up the computation of the program . Re OOP you are right , and this is an important point . However it is interesting to see these mathematical patterns in their full generality . Many devs know that lists can be mapped over . Not as many knows that lists can be mapped over precisely because they are Functors and thus anything that is a Functor can be mapped over . All in all , just to give some context , a php dev friend of mine asked me about Functor , so I quickly wrote up this small gist and thought that maybe no pun intended there are other people out there who would find this helpful .