Category theory using haskell