be polymorphic in the monad used