Upgraded version of System.Monad