Categories, Arrows, Monads and some Haskell