Monad classes, using functional dependencies
