Category theory for Haskell with a lens flavor