some work on monad laws and warnings