Experiments with comonads in Haskell