Idea for a community-built Haskell learning resource

One of the barriers that makes Haskell fairly niche as a language is that it is hard for a newcomer to both

  1. learn how to use it
  2. be convinced that doing so is worthwhile

I think it would be great if there was a single tutorial-style resource with the following properties:

  • community maintained: i.e. people regularly contribute to it with PRs that a group of people curate. This way it’s a project that can be kept up to date, improved and extended.
  • centrally endorsed: i.e. there’s a big red button to it on haskell.org and it’s a Haskell Foundation project. This seems important, because while there are many many learning resources, it’s hard for a newcomer to know what to choose.
  • free and online: this seems essential to lower the activation barrier of adoption
  • aimed at people with non-zero programming experience but no FP experience: there’s no one-size-fits-all resource, but I think it’s fair to assume that the crucial gap in the market is people with experience of programming that haven’t heard “the good news” about FP
  • centered around an example codebase: in this way, the book can serve as an example of what a real Haskell application looks like, and best practices re. cabal (or stack, depending)

Other features that would be nice (but not essential):

  • online-runnable code: again to lower the activation barrier of trying out Haskell
  • interactive: people can leave messages, so that discussions of confusing parts are there for subsequent readers to see

Example

I put together a draft example of the sort of thing I mean:

This is intended just as a sketch of the kind of resource I have in mind, not a real attempt to do it (yet).

My question

What I’m interested to know is if people think this:

a) a good idea in theory, but would require a lot of hard work
b) not the right way to solve the problem: there are already way too many good resources
c) other

In the unlikely event that people thought this was a really good idea, maybe I’d propose it as a Haskell Foundation project.

Potential objections:

What’s wrong with (the community version of) Learn You a Haskell?

LYAH is great, but it would be nice to have a resource which is specifically designed to be updated and extended continuously. Also, some people dislike LYAH for being:

  • too whimsical
  • too detached from real-world problems
  • aimed at total beginners to programming

In that case, what’s wrong with the wiki?

The wiki is also great, but it’s more of a reference guide than a curated tour through Haskell with a carefully crafted narrative, intended to be friendly for beginners.

OK then, what’s wrong with CIS194

This is a really good course, but it’s designed to be used by students in a class, not by software engineers trying to learn a language. I want something designed to make as effective and clear case as possible that if you’re a software engineer, you should try out Haskell.

Real world Haskell?

Again great, but it’s getting out of date.

Any of the many other books?

Paywalls, not community maintained.

6 Likes

As for something more interactive, this could have some potential, if it can be implemented in Haskell…

2 Likes

I am in full agreement with the stated goal as well as the analysis of some of the other options and why they aren’t adequate for what’s being proposed. I do think that this is a good idea and that it’s worth while to put community effort into.

I believe I’ve mentioned it when this topic was brought up before, and if I didn’t, I meant to, but I think that the most prudent plan is to turn the Haskell wiki book (not the wiki) into the resource we want to have. The infrastructure is already there, a lot of the pages are already written which means updating out of date things will not be difficult, and I really like the particular split of topics it currently has between the beginner, advanced, and ‘Haskell in practice’ sections. It would also be trivial to link to an external example code base on github or wherever else.

My biggest argument for using the wikibook is that so much of the groundwork is already done, which I believe vastly (psychologically and materially) reduces how daunting the task is and would result in more people being likely to volunteer to help. I’m sure virtually everyone agrees that in a perfect world we would have a high quality beginner’s resource, but getting people to contribute is difficult when it’s something starting at square one. I haven’t read every page closely to gauge all of the content, but I have looked over a lot of it, and what I’ve seen is already good. I’m surprised it isn’t brought up more when people talk about creating a community learning resource.

Edit: and if there is some substantive objection to it being hosted as a wikibook instead of anything else, in the absolutely worst case scenario, since the text is under CC, we could just fork it. My point is just that we should focus on improving this resource and turning it into what the community wants because so much of the grueling groundwork involved in getting the project off the ground is already done.

4 Likes

This is an awesome resource that I totally wasn’t aware of - thanks for pointing it out. I agree that starting from the material on the wikibook makes sense. I have a couple of thoughts on things I’d personally want to change:

  • I feel like the most important thing for a project like this is that there is a robust and smooth process for contributing which maximises the chance of community adoption. In particular, I think it would be great if edits and extensions were github PRs, which were reviewed by one of a team of editors.

  • I worry that the aesthetic of the wikibook will be offputting. That know that sounds silly, but I think aesthetics do matter a lot in signalling the quality of a resource.

For both those reasons, my inclination would be to fork the material and have it in a github repo, with a website hosted by e.g. netlify.

But regardless of that, I think for something like this to work, it would be optimal for it to be a supported project of the Haskell Foundation. Honestly, making a resource like this, (and improving haskell.org), feel like important enough goals that it would make sense to employ someone full time to work on them. That might not be realistic, but having a project like this be endorsed by the Haskell Foundation perhaps is…

3 Likes

I agree with both of you, even though it seems like we duplicate this work a lot (eg there are some good beginner books at Haskell Books « Haskell Books « Articles « extrema.is).

It’s a high-risk project (very many ways to fail or underdeliver); if there is volunteer energy it might be better to flesh out the strategy (discoverability, workflow, sustainability…), deliver some results and gather users before seeking official branding.

(I made a different kind of tool but with similar aims: https://haskell-links.org)

1 Like

An example implementation of what OP proposes is The rust book, which I’ve greatly benefited from.

The rust community has figured this out, and I would say we just borrow from them. Both their processes and workflows and even the template they use.
Then we can iterate an add to that if we want.

4 Likes

I would love to hear your reservations about https://lhbg-book.link

@simonmic Thanks for those links! There are some free books there I was unaware of, including Table of Contents - Happy Learn Haskell Tutorial. I agree that fleshing out strategy and getting started, before seeking “official status” makes sense. Of course, it’s a bit of a chicken and egg thing.

@tonyalaribe Oh, that’s a great example! Yeah, the rust book is almost exactly what I’m talking about in terms of workflow and appearance.

@gilmi I actually hadn’t seen this before! I really love the way it looks and the way it’s application focused around a concrete codebase. The ways in which it currently differs from what I’m envisioning are:

  • not marketed as a community project open to contributions. Not marketed as the go-to guide for newcomers.
  • focuses slightly more on the narrative of building a blog, and less on introducing Haskell (although it looks like it does a very good job of the latter), which might lead people to think it isn’t the first-time user guide to Haskell that they’re looking for.

Basically, what I’m imagining is taking the template and largely the content of https://lhbg-book.link, rebranding it as “The Haskell Book” and setting up the same process and workflows as the Rust book. And then trying to get it put on haskell.org and/or endorsed as a Haskell Foundation project.

As you are (I think?) the author of that project, I’d be interested to hear your thoughts on that.

I’ve seen the fallacy of “This time, we’re definitely going to write a Haskell introductory resource that’ll solve all the problems” too many times. It’s tempting to think so but in the end it’ll be another learning resource.

Haskell already have tons of learning resources of various shapes. I myself created a beginner-friendly Haskell course and it’s highly successful in teaching Haskell to people with diverse backgrounds.

I’m not telling you not to pursue the project you believe in. Diversity in learning resources is great (video courses, blog posts, books, project-oriented guides, etc.)! But I’d recommend you to find the answers to the following questions for yourself before spending tons of time creating the resource you want:

  • Why your resource won’t become outdated?
    Many Haskell learning materials are great but they become outdated with time. What makes yours different?
  • Are you prepared to update your resource forever due to constant breaking changes in GHC?
    When I started learning Haskell and writing lots of guides and tutorials, I didn’t expect that the ecosystem breaks backwards compatibility that often making all my past work invalid. Creating a learning resource while also knowing that it’ll become outdated soon-or-later is mentally challenging.
  • How are you going to attract volunteers to support your project?
    You want a “community” project but the Haskell community is currently small. People’s free time, resources and attention span is quite limited. Why they’re going to spend their time working on your project and not on something else?
  • Can your mental health afford facing the drama?
    If you create a Haskell course, someone will come to you and say “Why did you spend all this time creating your resource instead of improving existing ones?”. Or some of the book contributors don’t like each other. This is just a single example. But any community-driven project has more chances of seeing human conflicts. Are you prepared to resolve them?
  • What if your project doesn’t become as successful as you want?
    When you strongly believe in an idea, it’s easy to think that the project will be successful. But statistically, chances are not on your side. There’s a high probability of being deeply disappointed when you don’t get the result you want. So, do the project only if you enjoy the process and not only if you think you’ll reach the final goal.
5 Likes

Thanks, this is welcome feedback, and I appreciate it. My main response to your question of “why won’t this be just another learning resource” is: I’m much less concerned with the exact content than with setting up a workflow where the book is a commonly-known centralized resource, maintained by the whole community. As evidence that this is possible, consider @tonyalaribe’s link to the rust book. I’ll answer the specific points you raise below, because they’re excellent questions:

Why your resource won’t become outdated? I think if there were a resource called “The Haskell Book” that was widely understood to be the canonical guide (big red button on haskell.org), PRs to fix deprecations would be common enough to prevent this. For example, if such a book existed and I noticed some broken code, I’d happily submit a PR of this kind.

Are you prepared to update your resource forever due to constant breaking changes in GHC? There does now seem to be more caution about breaking changes, but basically I’d answer the same as the above.

How are you going to attract volunteers to support your project? Good question. Mainly I started this discussion to gauge interest levels. I guess it seems like a problem of coordination, not energy. Evidently, many people have used their free time to make high quality resources, but it feels like with the right organization, these individual efforts could be much more impactful. For example, there is a lot of didactic material I think I could write well, but I generally don’t, basically for the reason you raised, of not wanting to create “just another resource”. If the thing I’m envisioning existed, I’d be much more likely to spend time writing a chapter, or improving an example.

Can your mental health afford facing the drama? This is sort of why I feel like such a project should be a Haskell Foundation owned thing in the medium run. Again, this is just speculative, but it does feel very in line with its charter of “broadening the adoption of Haskell, by supporting its ecosystem of tools, libraries, education, and research.”

What if your project doesn’t become as successful as you want? Yeah, that’s a great point.

3 Likes

@gilmi I actually hadn’t seen this before! I really love the way it looks and the way it’s application focused around a concrete codebase.

Sorry to hear that, it is one of the three free sources in the introductory list on haskell.org/documentation, not sure how to make it better known.

Basically, what I’m imagining is taking the template and largely the content of https://lhbg-book.link, rebranding it as “The Haskell Book”

What do you mean by that?

As you are (I think?) the author of that project, I’d be interested to hear your thoughts on that.

I’m not sure what you are asking me, can you clarify please?

Another similar effort worth being aware of is https://github.com/haskellfoundation/HaskellSchool, which is a Haskell foundation project. You seem to have a similar goal in mind so probably worth at least talking with the members of that project and learn from their efforts.

1 Like

Well, I can tell you that being featured on haskell.org and used by half of the community itself doesn’t attract a lot of contributors. GHCup is mainly still a one-man show, with some irregular contributions here and there.

Something like a fully fledged haskell book would be magnitudes more work than ghcup. And require occasionally deep knowledge to contribute usefully. That limits your space of contributors to a rather small set of people… like @ChShersh @isovector etc, who have written in-depth material before.

Hence I do think this might need some more focused collaboration with actual funding.

3 Likes

@gilmi

I guess the more accurate answer is that I had seen its name, but had assumed, because of its name, that it was for a niche group interested both in learning Haskell and making a blog. Sort of in the vein of Haskell School of Music – Euterpea. Obviously this is partly just my own silliness, but I think it also speaks to the point I’m trying to make, which is that there is a branding and workflow problem with existing resources. That’s the problem I’m interested in: can we can to a situation like the Rust book, where there is a centrally endorsed, community maintained, high quality, up-to-date learning resource. And do we want to? (I think emphatically yes)

Thanks for both the link to your book (I’m a fan) and the HaskellSchool. You’re totally right that that looks like it has a similar goal.

@hasufell Yeah, that’s true. I tend to agree that this would only happen with focused collaboration and actual funding. In an ideal world, those seem like the sorts of things the Haskell Foundation could help out with.

1 Like