<div dir="ltr">Hello Michael,<br><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 1, 2016 at 6:37 AM Michael Snoyman <<a href="mailto:michael@fpcomplete.com">michael@fpcomplete.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Sep 1, 2016 at 12:41 AM, Nicolas Wu <span dir="ltr"><<a href="mailto:nicolas.wu@gmail.com" target="_blank">nicolas.wu@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>I think a beginner doesn't usually make the choice of how to use GHC/stack/cabal by themselves; they are usually being instructed by someone (or a resource) that has decided that for them.</div></div></div></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>I disagree, and that's where a lot of this debate comes from. Let me give an example from another language. Suppose you know nothing about Rust, and decide you want to learn Rust because you see a blog post talking about how awesome Rust is (with no specific link to "get started here," which is frequently the case). You'd probably go to Google and search "Rust programming language," and show up on their homepage. They have two links that stand out (to me at least):</div><div><br></div><div>* A big "Download" button, which provides the compiler and build tool (AFAICT it does not include non-standard libraries, so pretty equivalent to HP Minimal)</div><div>*  A "Show me" link taking you straight to a tutorial, which covers both command line invocation for the compiler _and_ the build tool</div><div><br></div><div>This is the documentation issue I've raised a few times: a new user coming from nowhere has no way of really getting started with Haskell after downloading the platform. _Some_ kind of "go here next" is necessary if we want to improve the new Haskeller bounce rate (which is all I'm concerned with). By that metric, a solid "how to get far in Haskell with just standard libraries and the ghc executable" would work, as would a tutorial on "writing applications with HP and cabal-install."</div></div></div></div></blockquote><div><br></div><div>If I've understood you correctly, I agree on this point: we should be providing a single download that contains something equivalent to the HP Minimal. That's what I'm suggesting. I also agree that pointing to a tutorial that outlines how to actually use the tools is useful.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>However, based on my experience working with new users (both through Yesod, general Haskell work, and at my day job), I believe that Stack covers the job best, since:</div><div><br></div><div>1. The Haskell standard libraries are very bare bones, so most users will quickly want an additional library, even just for experimenting</div><div>2. I still see users complaining about dependency solving problems with cabal-install, and new users will likely be turned off very quickly by that</div><div>3. Stack+curated package sets has produced much lower friction in these regards</div><div>4. Stack already has a quick start guide (<a href="https://docs.haskellstack.org/en/stable/README/#quick-start-guide" target="_blank">https://docs.haskellstack.org/en/stable/README/#quick-start-guide</a>), in-depth guide (<a href="https://docs.haskellstack.org/en/stable/GUIDE/" target="_blank">https://docs.haskellstack.org/en/stable/GUIDE/</a>), and has usage covered by books and tutorials. I don't believe a holistic workflow is included in the HP or the Cabal websites for cabal-install workflow (though if I'm mistaken, please point it out, that would be an interesting comparison).</div></div></div></div></blockquote><div><br></div><div>This is where I think you and I have different use cases, and where I'm advocating diversity that will allow us both to teach as we like.</div><div><br></div><div>In my experience as a university lecturer that teaches students learning Haskell in the first term of their first year, I have a different approach that has also seen success. My initial tutorials require students to invoke ghc and ghci to familiarise themselves with the concepts of compilers and interpreters. <span style="line-height:1.5">They do so on small self-contained exercises. </span><span style="line-height:1.5">I'm at the same time trying to get them used to the command line, since for many this will be their first experience of any development at all. They need a simple workflow at this point since they are already dealing with so many different issues. Later exercises that involve a very small project use cabal, but for the most part this is redundant: our university machines are pre-configured with all the packages I know they'll need for the tasks they need. I try to avoid having them deal with dependency issues at all, since that's an area that's tangential to learning about functional programming and they have so much to learn and understand at this point.</span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">Let me stress that </span><span style="line-height:1.5">I'm not trying to change the way you teach the newcomers you encounter, I'm just saying that I approach this differently (I suspect that it's because the beginners you're describing are newcomers to Haskell who already have some programming experience). When my students hit the downloads page to install Haskell on their own machines, I want them to find at least a minimal toolchain that contains a compiler and an interpreter.</span></div><div><span style="line-height:1.5"><br></span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>PS: The hypothetical example of "reads a great Rust blog post and gets interested" is _exactly_ what I'm hoping to cause to happen in the Haskell community. I want to encourage lots of people to write great content on why Haskell is an amazing language that will solve so many real world problems. My big concern with the direction of <a href="http://haskell.org" target="_blank">haskell.org</a> is that these new users will end up hitting a brick wall very quickly with the content on the site right now.</div></div></div></div></blockquote><div><br></div><div>I want to build up a good community too, and I am grateful the efforts that have been put into technologies like stack and cabal. I want to explicitly acknowledge and appreciate all the hard work that you and other people have been putting into improving our infrastructure: what we have is a very valuable resource. I also think the site needs improving, so let's work to fix that.</div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">I'm obviously aware that you have been unhappy with the decisions the committee has made on this issue, and I'm sorry you've been upset. I can only assure you that you have been listened to in the past and that we will continue to listen. I think our goal is to foster a community that embraces our common interests and accepts diversity.</span></div><div><br></div><div><span style="line-height:1.5">Best wishes,</span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">Nick</span></div></div></div>