<div dir="ltr">Hey I think it's a bit clearer now .... need to meditate on this :) Thanks !<br></div><br><div class="gmail_quote"><div dir="ltr">Le lun. 9 juil. 2018 à 13:55, Francesco Ariis <<a href="mailto:fa-ml@ariis.it">fa-ml@ariis.it</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello Olivier,<br>
<br>
On Mon, Jul 09, 2018 at 01:31:07PM +0200, Olivier Revollat wrote:<br>
> In the second case, it's a simple recursion, so far so good ... but when I<br>
> look at the implementation of "forever" i can't wrap my head around :<br>
> <br>
> <a href="http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html#forever" rel="noreferrer" target="_blank">http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html#forever</a><br>
<br>
    forever a   = let a' = a *> a' in a'<br>
<br>
`*>` is the same as `>>` (if you have ever met `>>`), with the difference<br>
that the latter works on monads only. In do notation, we could write<br>
<br>
    forever :: Monad m => m a -> m b<br>
    forever a = let a' = do a<br>
                            a' in<br>
                do a'<br>
<br>
Which should be easier to get: we `do` a'; a' is nothing but a and a',<br>
so we do a and then a', which is nothing but a and a', etc.<br>
<br>
Does this explanation feel right?<br>
<br>
As soon as you can, familiarise yourself what the do notation desugars to:<br>
in my opinion plain operators are clearer<br>
-F<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>