[Haskell-cafe] Are constructors strict?

Jan Christiansen jac at informatik.uni-kiel.de
Fri Jan 21 15:41:55 CET 2011


On 21.01.2011, at 11:52, Daryoush Mehrtash wrote:

> Do I have to have MonadPlus m or would any other Monad class work  
> the same way?


Not all monad instances satisfy

   undefined >>= return . Just = undefined

if that's what you are asking for. For example, consider the identity  
monad.

   instance Monad Identity where
     return = Identity
     m >>= k = k (runIdentity m)

Then we have

      undefined >>= return . Just
   = undefined >>= Identity . Just
   = Identity (Just undefined)
   /= undefined

If >>= performs pattern matching on its first argument like most  
instances do then you get undefined >>= return . Just = undefined.

I think that the monadplus laws

   mplus m n >>= f = mplus (m >>= f) (n >>= f)

called (Ldistr) in the paper and

   mzero >>= f = mzero

called (Lzero) in the paper imply

   undefined >>= return . Just = undefined

At least if you have mzero /= mplus m n which is quite desirable. I  
don't think that this holds for continuation based monads. But  
Sebastian will most certainly know better as he is one of the authors  
of the paper.

Cheers, Jan



More information about the Haskell-Cafe mailing list