refactor to conform to monad-like laws