works with MonadError now