reduce dependency on monad