The last time Hackerfall tried to access this page, it returned a not found error. A cached version of the page is below, or clickhereto continue anyway

Learn Haskell with exercism.io

I recently stumbled upon exercism.io. Its an open source collaborative programming practice site by Katrina Owen of JumpstartLab that grew out of the daily warmup exercises for their gSchool students (Introducing exercism.io). The problems are generally simple, where solutions are fewer than 100 lines of code, usually around 20-30. Unlike the typical Euler problem, you wont need to rely on much training in mathematics (although it certainly can help!).

At first I thought it would be a fun way to learn a little more about Elixir and Clojure, but I quickly came to the conclusion that what I really wanted was to practice Haskell so I got to coding and sent a pull request (#562) after porting a handful of exercises. Katrina quickly merged the code and over the course of the next month I systematically ported all 54 exercises.

While I did get in a lot of great practice writing all of the code, the true value of exercism.io is the collaboration. Once youve submitted code for an exercise, anyone else who has completed the exercise can review your code and submit nits. Nits are roughly equivalent to code review, although many reviewers will go above and beyond to help the submitter better understand the language and/or the problem so that they can arrive at an elegant solution.

I also learned how common it is for new Haskell developers to have an incomplete mental model for how Haskells non-strict evaluation works. This commonly manifests as a non-strict fold with a spine-strict data structure in the accumulator, such as building an Int or Map from a list. This certainly isnt a new discovery (An insufficiently lazy map), and I wasnt very surprised. It took me a while to wrap my head around it too since the strategies for writing efficient code in Haskell end up being so different from strict functional programming languages (such as Erlang, Clojure, etc.). The best reference Ive seen on Haskells evaluation model is the Lazy Evaluation and Weak Head Normal Form section of Parallel and Concurrent Programming in Haskell. The whole book is fantastic, but that chapter is a must-read for anyone interested in Haskell. You dont need to be an expert to read it, some basic background (such as reading Learn You a Haskell for Great Good!) is more than sufficient.

If youre learning Haskell or just looking for a little practice, I highly recommend giving exercism.io a try. I plan to continue spending some time every day to help nitpick, and would be happy to help get you up to speed.

Continue reading on bob.ippoli.to