<div dir="ltr"><div>><span style="font-size:12.8px">subtle difference means that you do need to know about this due to how stacks work in GHC. If you use error and then don't also add that constraint yourself to your function, youll only see part of the stack.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">It is unfortunate that the design forces this implementation detail on users trying to apply a plain old function.</span></div><div><span style="font-size:12.8px"><br></span></div><div><br></div><div>I updated my GHC 8.0.1 candidate, got this:</div><div><br></div><div><div>$ ghci</div><div>GHCi, version 8.0.0.20160204: <a href="http://www.haskell.org/ghc/">http://www.haskell.org/ghc/</a>  :? for help</div><div>Loaded GHCi configuration from /home/callen/.ghci</div><div>Prelude> let myList = [1..5 :: Integer]</div><div>Prelude> let myList' = myList ++ undefined</div><div>Prelude> :t myList'</div><div>myList' :: (?callStack::GHC.Stack.Types.CallStack) => [Integer]</div></div><div><br></div><div>><span style="font-size:12.8px"> changed to use constraint kinds and type alias the implicit parameter behind a nicer API.<br></span><br></div><div>Even if this has happened, we're still talking about the fourth chapter which is prior to types, typeclasses, constraints - everything. None of this means anything to a beginner being shown how to use undefined. The book is trying to make sure _anyone_ can learn Haskell, it's not an advanced DSLs book that introduces DataKinds.</div><div><br></div><div>The implementation is leaking all the way to the fourth chapter of a book for complete beginners. Users will not be sympathetic when the implementation elides information because the user failed to speak to the nasal demons in the correct accent.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Feb 13, 2016 at 3:04 AM, Oliver Charles <span dir="ltr"><<a href="mailto:ollie@ocharles.org.uk" target="_blank">ollie@ocharles.org.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Just a clarification - the presence of that parameter does not say "I use call stack" but rather "I need *a* call stack". This subtle difference means that you do need to know about this due to how stacks work in GHC. If you use error and then don't also add that constraint yourself to your function, youll only see part of the stack. Hence it more than just UX noise - I have a decision to make, and building a call stack gas a cost.</p>
<p dir="ltr">Also, is this RC2? I thought this was now changed to use constraint kinds and type alias the implicit parameter behind a nicer API.</p>
<br><div class="gmail_quote"><div><div class="h5"><div dir="ltr">On Sat, 13 Feb 2016 8:51 am Christopher Allen <<a href="mailto:cma@bitemyapp.com" target="_blank">cma@bitemyapp.com</a>> wrote:<br></div></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div style="font-size:12.8px">Prelude> let myList = [1, 2, 3 :: Integer]</div><div style="font-size:12.8px">Prelude> let myList' = myList ++ undefined</div><div style="font-size:12.8px"><div>Prelude> :t myList</div><div>myList :: [Integer]</div></div><div style="font-size:12.8px">Prelude> :t myList'</div><div style="font-size:12.8px">myList' :: (?callStack::GHC.Stack.Types.CallStack) => [Integer]</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This is on by default and insofar as I've been able to try, it's avoidable in a default GHCi 8.0 REPL session. I'm glad I caught this before our book goes to print in a couple months. We'd managed to avoid talking about implicit parameters in 1,100+ pages of book but now we're forced to acknowledge their existence in the 4th of 32 chapters.<br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This slipped past the radar more stealthily than the earlier stages of BBP did for 7.10. I was hearing about BBP on the GHC Trac pretty early on for months on end. Was the thinking that people still used implicit parameters for anything or taught them? On the one hand, this is a nice change and something I personally attempted (and failed) to make easier in GHC 7.10. The implementation making the types noisy rankles and didn't seem necessary when I investigated it between 7.8 and 7.10.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Could you warn us when (educationally relevant?) stuff like this is coming down the pipe before the RC please? Ideally during the design phase. I think this was discussed as part of FTP to avoid future debacles.<br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This isn't just a pedagogical problem, this is a UX problem. The users don't _care_ that call stack information is being carried around. Why would they? It happens without any mention in the types in almost every other programming language.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">We checked after the previous thread where ($) occurred in the book. ($) is in the second chapter of the book, which is the first chapter of Haskell code. Now we have to hand-wave something completely impossible for them to understand (chapter 2 is expressions, types are chapter 5) or edit ($) out of the book until they can understand it. We can't write it completely out of the book because ($) gets used all over the place and we don't want encountering it to throw them off.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">--- Chris Allen</div><div style="font-size:12.8px"><br></div>
</div></div></div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr">Chris Allen<br><div><span style="font-size:12.8000001907349px">Currently working on </span><a href="http://haskellbook.com" target="_blank">http://haskellbook.com</a></div></div></div></div></div></div>
</div>