better monad tyclasses