Blog post: Why I Support the Haskell Foundation

https://cdsmithus.medium.com/why-i-support-the-haskell-foundation-1ac3cda1f82f

This is a post about why I chose to become a major contributor to the Haskell Foundation. A bit of an emotional retrospective on my journey with the Haskell Community so far. Cheers!

13 Likes

From that blog post, I found code.world! How cool! I’m very interested in your experiences with teaching Haskell to schoolchildren. As a newbie following the usual recommendations for getting started, I went through the usual gauntlet – getting everything downloaded, discovering the absurd redundancy of cabal and stack (I have to mention modules I want in two different files?!), and my first opaque error messages. Seeing a tiny program take a long time to compile was also kind of a shock.

Today I thought of taking a break from learning Haskell and getting back to an old physics project (how much atmosphere an orbit-bound horizontally-launched rocket would need to displace depending on altitude, a fairly simple integration problem), then tried to toughen up, thinking, “Why don’t I try it in Haskell anyway?”, then despaired again. But when I saw your physics demo, I felt encouraged: here’s a style model! Maybe I’ll see if I can do it all in CodeWorld.

I’ve started working on the confusing error message front. I noticed that CodeWorld glosses error messages. If those glosses are your own creation, I’d like to start adding them – try to get CodeWorld compiles to generate various errors, start articles (or add to existing ones) based on the glosses you provide, and of course, adding links to your sources wherever possible. Let me know whether you’re interested in cooperating. I’ve been contributing to the haskell.org wiki, and maybe I can fill out your unfinished tutorial chapters on CodeWorld as an adjunct to that effort.

I can’t think about donating to the Foundation at the moment, since my business is seriously pandemic-stricken. On the other hand, the business drought is giving me a lot of free time.

5 Likes

A heartwarming and inspiring post @cdsmith. Thank you for your generosity!

3 Likes

Hi there,

Thanks so much for your reply. I’d definitely love some help on CodeWorld. The general story is that when it comes to code.world/haskell, I try to leave GHC as is unless there’s something really egregious. But for code.world without the /haskell, which is my own stylized dialect of Haskell, I do replace a lot of error messages. There are two ways this happens

  1. The old way: matching regular expression replacement rules against error text. See https://github.com/google/codeworld/blob/master/codeworld-error-sanitizer/src/ErrorSanitizer.hs
  2. The new-ish way: pre-parsing the code, and looking for specific patterns that are either errors or error-prone. See https://github.com/google/codeworld/blob/master/codeworld-compiler/src/CodeWorld/Compile/Stages.hs#L175

These replacements are partly about just changing things students have found to be confusing, but also about making GHC’s messaging consistent with CodeWorld’s dialect. For example, CodeWorld is not run from the command line, so I scrub mention of command line options; and CodeWorld’s Prelude doesn’t export any type classes, so I reword anything I’ve found that talks about instances or classes.

If you’re interested in working on this, reach out to me at cdsmith@gmail.com, and I’d love to start that conversation and help any way I can.

1 Like

Thanks for this. ErrorSanitizer looks like it has some good clues. Compile/Stages – ah, that’s the old problem of syntax error recover – parsing what you can to help narrow down what you can’t parse, and looking at what didn’t parse in terms of what few omissions or additions or slight deviations may have led to parser confusion. An old problem that people still keep working on.

https://dl.acm.org/doi/10.1145/3387904.3389252

Anything that helps learners fix things fast also makes learning faster and more efficient – and more likely to continue.