[Haskell-cafe] Monad laws

John Lato jwlato at gmail.com
Wed Jun 25 04:52:34 UTC 2014


On Wed, Jun 25, 2014 at 12:33 PM, Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk
> wrote:

> On 06/25/2014 05:54 AM, Rafael Almeida wrote:
> > Hello,
> >
> > You guys have been great taking my questions. Thank you. Now I have
> another
> > one :)
> >
> > What can go wrong if I make an Monad instance but don't follow Monad
> rules
> > (identity and associativity)? Sure it would be misleading for someone
> using
> > the non-conforming class. They may make code that assume those laws,
> > although they don't hold. However, could it make the compiler generate
> bad
> > code
>
> The compiler makes no assumption (at least that I know of) that laws are
> followed. It should never generate ‘bad’ code (whatever that might mean)
> anyway.
>

The compiler makes assumptions about associativity when de-sugaring
do-notation.  If the monad laws aren't followed, it's possible for these
two blocks to show different behavior (given that a,b,c are all values of
the misbehaved Monad instance):

> do { a; b; c }

> a >> b >> c

I think everyone can agree that this is surprising, at the very least.
 Although it's not the compiler that's generating bad code here.

John L.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140625/15b534b9/attachment.html>


More information about the Haskell-Cafe mailing list