[From the old-posts-that-I've-sat-on-for-entirely-too-long-for-no-apparent-reason department...]
The first part of the course was very straight-forward covering the basics of programming in the functional style. But the difficulty ramped up quickly.
A couple of labs were particularly mind-bending, not just for me judging by the message boards. Both were based on Functional Pearl papers and featured monads prominantly. The first was on monad parser combinators and the second was based on A Poor Man's Concurrency Monad. Combining concurrency (of a simple kind), monads and continuation passing is a lot to throw at people at once.
The abrupt shift to more challenging material is part of a philosophy of "teaching the students to fish for themselves". So is introducing new material in the labs rather than in the lectures. This style of teaching alienated a number of students. It's not my favorite, but I can roll with it.
Just be aware that the course requires some self-directed additional reading and don't flail around trying to solve to homeworks without sufficient information.
Now that the class is over, I'd like to find time to continue learning Haskell:
- Finish Learn You a Haskell
- Write yourself a Scheme in 48 hours
- 99 Haskell Problems
- Chris Allen, aka bitemyapp has a really great How to learn Haskell guide as well as some interesting thoughts about furthering your functional education
- The Haskell Road to Logic, Maths and Programming
One reason I wanted to learn Haskell is to be able to read some of the Haskell-ish parts of the programming languages literature: