haskell Comonad transformers using functional dependencies ekmett/comonads-fd