<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I just want to pipe up and say I'm not comfortable with this response. When I feel this way about writing on a forum, I normally contact the author in private, but I think posting publicly here has its merits. I'm hoping that the long correspondence AntC and I have had -- often with opposing viewpoints but with mutual respect -- with withstand this email.<div class=""><br class=""></div><div class="">Michael posted here expressing frustration with his experience learning and using Haskell. In my opinion, he has spent too much time reading older papers, written by experts for experts -- which Michael is not. I do not fault Michael for this: these resources are sometimes what appear when searching, and we as a community have done a poor job marshaling our educational resources. (Michael, I just thought of a resource you might find useful: <a href="http://dev.stephendiehl.com/hask/" class="">http://dev.stephendiehl.com/hask/</a> is an oft-linked resource attempting to do that marshaling. I am not vouching for it here, per se, but I know others have found it useful.)</div><div class=""><br class=""></div><div class="">However, Michael very specifically said that "just learn lambda-calculus" was not helpful for him, and so I think it's unhelpful for someone to respond with "just learn lambda-calculus". There are a number of other statements in the email below which could be seen as belittling -- also not helpful.</div><div class=""><br class=""></div><div class="">Instead, I wish that we, as a community, could take posts like Michael's at face value: this is the experience of someone who wants to learn Haskell. While some of the conclusions stated in that post are misunderstandings, it is not the sole fault of the learner for these misunderstandings: instead, we must try to understand what about our community and posted materials induced these misunderstandings, and then seek to improve. Many people in Michael's situation may not have posted at all -- and so this kind of information can be very hard to get.</div><div class=""><br class=""></div><div class="">Michael, I have no silver bullet to offer to you to try to help you here. I do tend to agree with AntC that you have developed some misconceptions that are hindering your continued learning. The terminology actively hurts here. (To be fair, the first Haskell standard pre-dates both Java and C++, and so one could argue who got the terms wrong.) For my part, I am trying to help with this situation both by trying to improve error messages, and though my support of the Haskell Foundation's Haskell School initiative (<a href="https://github.com/haskellfoundation/HaskellSchool" class="">https://github.com/haskellfoundation/HaskellSchool</a>). These will take time to grow, but my hope is that a future person like you will have an easier route in.</div><div class=""><br class=""></div><div class="">In the meantime, I implore us to take all expressed experiences as exactly that: the experience of the person writing. And if they say they don't want X, please let's not feed them X. :)</div><div class=""><br class=""></div><div class="">Richard<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Sep 16, 2021, at 12:53 AM, Anthony Clayden <<a href="mailto:anthony.d.clayden@gmail.com" class="">anthony.d.clayden@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><font face="arial, sans-serif" class="">Hi Michael, oh dear, oh dear, oh dear.</font><div class=""><font face="arial, sans-serif" class=""><br class=""></font></div><div class=""><font face="arial, sans-serif" class="">The seeds of your confusion are very evident from your message. How to back you out of whatever deep rabbit-hole you've managed to get your head into?<br class=""></font><div class=""><font face="arial, sans-serif" class=""><br class=""></font></div><div class=""><font face="arial, sans-serif" class="">> <span style="font-size: 1em; white-space: pre-wrap;" class=""> ... Your </span>average<span style="font-size: 1em; white-space: pre-wrap;" class=""> reader (already a programmer) would be better served by a </span><span style="font-size: 1em; white-space: pre-wrap;" class="">comparative approach: Here's how to say something in a couple of other </span><span style="font-size: 1em; white-space: pre-wrap;" class="">programming languages, here's how to say something roughly equivalent </span><span style="font-size: 1em; white-space: pre-wrap;" class="">in Haskell -- BUT, here's how it's subtly different in Haskell.</span></font><br class=""></div></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">No. Just no. Haskell is not "subtly different" to (say) Java in the way that C++ or C# are different. (I'll leave others to judge how subtly different they are.)</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">Haskell is dramatically and fundamentally different. You can't just 'translate' an algorithm from OOP to Haskell. Many newbies try, and there's many tales of woe on StackOverflow. Just No.</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">I really don't know how you could have got any experience with Haskell and say "subtly".</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">I suggest you unlearn everything you think you know about Haskell, and strike out in an entirely different direction. The best approach would be to spend a few days playing with lambda calculus. (That's what I did before tackling Haskell.)</span></font></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><pre style="white-space: pre-wrap;" class=""><font face="arial, sans-serif" class="">> (I've actually been curtly informed on the beginners' list -- yes, the beginner' list! -- that my problems of comprehension can be solved simply: "Learn lambda calculus.")</font></pre></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class="">Lambda calculus is an excellent place for beginners to start. What could be easier to learn? It's certainly easier than grokking a Turing machine; and much easier than Haskell: less than a handful of primitives yet can compute anything computable.</font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">> </span><span style="font-size: 1em; white-space: pre-wrap;" class="">And since the concepts are seldom described in </span><span style="font-size: 1em; white-space: pre-wrap;" class="">concrete enough and time-honored programming language terms (by </span><span style="font-size: 1em; white-space: pre-wrap;" class="">comparison to other programming languages) </span></font></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class="">I'm guessing that the concepts you're talking of simply don't correspond to anything in time-honoured (procedural) programming. Anybody writing about Haskell (including anybody writing the User Guide) assumes a base level of understanding of Haskell. You've clearly veered off the track and haven't yet reached base. Remember the User Guide builds on top of the Language Report.</font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class="">(On the point of 'time-honoured': lambda calculus is almost exactly the same age as Turing machines. The first well-known programming language using lambda-calculus ideas (LISP 1966) is almost exactly the same age as the first OOP language (Simula 1967). Which is the more time-honoured?)</font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class="">You do have a point that the terminology in Haskell is often mysterious</font></span></div><div class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><font face="arial, sans-serif" class=""><br class=""></font></span></div><div class=""><font face="arial, sans-serif" class=""><font class=""><span style="white-space:pre-wrap" class="">> [SPJ said] </span></font><span style="font-size: 1em; white-space: pre-wrap;" class="">F# had settled on the term "workflow" instead of "monad", </span><span style="font-size: 1em; white-space: pre-wrap;" class="">and he felt this was wise.</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">Yes many have yearned for a more warm-and-cuddly term than "monad". But the terminology barrier starts before that.</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">Haskell typeclasses are not 'classes' in any sense recognisable from OOP. There are no objects, no hidden state, no destructive assignment. We might go back to February 1988 when a strawman for what became typeclasses used OVERLOAD/INSTANCE.</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class="">AntC</span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><br class=""></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="arial, sans-serif" class=""><span style="font-size: 1em; white-space: pre-wrap;" class=""><br class=""></span></font></div></div>
_______________________________________________<br class="">Haskell-Cafe mailing list<br class="">To (un)subscribe, modify options or view archives go to:<br class=""><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br class="">Only members subscribed via the mailman list are allowed to post.</div></blockquote></div><br class=""></div></body></html>