
On Wed, Jun 25, 2014 at 12:33 PM, Mateusz Kowalczyk 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.