<div dir="ltr">The way you're measuring algorithmic complexity does carry over to the lazy setting provided it's single-threaded because the order of execution is purely determined by the STG Code. In the concurrent lazy setting, it's a bit trickier since lightweight locking mechanisms occur when multiple threads evaluate the same thunk, making it non-deterministic. But the same problem is there for imperative concurrent programs.<div><br></div><div>The best resources I've found on GHC are:</div><div><br></div><div>Example-driven introduction to Core: <a href="https://davidterei.com/talks/2016-03-cs240h/ghc-compiler-slides.html" target="_blank">https://davidterei.com/talks/2016-03-cs240h/ghc-compiler-slides.html</a></div><div>GHC Illustrated (visual of the runtime system): <a href="https://takenobu-hs.github.io/downloads/haskell_ghc_illustrated.pdf" target="_blank">https://takenobu-hs.github.io/downloads/haskell_ghc_illustrated.pdf</a></div><div>Commentary: <a href="https://ghc.haskell.org/trac/ghc/wiki/Commentary">https://ghc.haskell.org/trac/ghc/wiki/Commentary</a></div><div>*The Commentary is a bit out of date in some sections and very sparse, but that's the closest you can get on documented implementation details other than the Notes inside of the GHC source code itself.</div><div><br></div><div>Beyond that, the GHC code base is your friend ;) But seriously though, a book on Haskell performance is long overdue.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jul 30, 2016 at 1:49 PM, Manikanda Krishnan <span dir="ltr"><<a href="mailto:vmk8993@gmail.com" target="_blank">vmk8993@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks Rahul ,<div><br><div>I am currently only using simple patterns   trying to replicate the behavior of standard functions that I have learned so far in order to familiarize myself with the recursive way of doing things .</div><div><br></div><div>Currently I am just using the GHCI directive (:set +s) to compare runtimes etc and computing algorithmic complexity like how I normally do it in imperative languages (not sure if they hold up in lazy settings), </div><div><br></div><div>Can you point me to resources where I can learn how  the </div><div>a)GHC actually works .</div><div>b)optimize or analyze the code I write in haskell .</div><div><br></div><div><br></div><div>Thanks in advance :)</div></div></div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">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>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Rahul Muttineni</div>
</div>