<div dir="ltr">Hello,<br><div><br><div class="gmail_quote"><div dir="ltr">Le mer. 28 oct. 2015 à 15:59, PATRICK BROWNE <<a href="mailto:patrick.browne@dit.ie">patrick.browne@dit.ie</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><p>{- From Learn Haskell Fast and Hard : 4.3.1.  Maybe is a monad <br> <a href="http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/#maybe-monad" target="_blank">http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/#maybe-monad</a><br> <br> Concerning the code below I have the following questions:<br> 1) Are eligibleLet and eligibleEquational operationally equivalent (i.e. perform the same operations) and/or semantically equivalent(i.e. Church-Rosser)?<br></p></div></blockquote><div><br></div><div>A priori, they're only semantically equivalent since in eligibleEquational intermediary computation are repeated whereas in eligibleLet they're only effectued once.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><p> 2) Apart from the return type of Maybe instead of Bool how does eligibleMonad differ from eligibleLet?<br></p></div></blockquote><div><br></div><div>eligibleMonad is nice and readable while eligibleLet is a tiresome mess to write and maintain...<br></div><div>Basically in eligibleMonad the logic that checks whether  an operation is possible is rolled into the monadic operations themselves whereas in eligibleLet you have to check every operation validity yourself (so you can forget one or do it incorrectly).<br><br></div><div>Note that with more familiarity with monads, you would probably rewrite eligibleMonad to avoid naming the intermediary account (and thus avoid any confusion between versions) :<br><br>eligibleMonad account = depositM 100 account <br>  >>= withdrawM 200 <br>  >>= depositM 100 <br>  >>= withdrawM 300<br>  >>= depositM 1000<br>  >> Just True<br><br></div><div>This would make it very easy to add or remove operations.<br></div><br></div><div class="gmail_quote"><br></div><div class="gmail_quote">-- <br></div><div class="gmail_quote">Jedaï<br></div></div></div>