It's weird to see a comment I wrote 4 years ago saying "Yeah, I haven't really touched this in 3 years." Man, I'm getting old.
Still, it's neat to see folks still find this interesting & informative. I learned a lot from writing it, and I hope others learn a lot from reading & working through it.
Thank you, I was looking for exactly this kind of Haskell tutorial. I really liked learnyouahaskell, but realworld Haskell not soo much. Will give this a go.
Spent a lot of time this week working through the Learn you a Haskell tutorial. Definitely getting bored of adding numbers, each exercise and example is so trivial that it's hard to get curious and go down a rabbit hole that teaches you a lot.
I'll try this out this week. Thanks for sharing!
What I'm wondering about is how you arrived at the 48 Hour number?
It's a pun on an existing Scheme implementation, Scheme 48 [1]. This was a research implementation by Jonathan Rees and Richard Kelsey that was so named because it was supposedly written in 48 hours. The idea for the tutorial was that "Hey, anybody can write a Scheme in 48 hours, you don't have to be an accomplished professor!"
48 hours is actually somewhat ambitious - it took me about 3 months of nights & weekends time to write it (although that also included teaching myself enough Haskell to write the implementation all the way through first before writing it up as a tutorial). It's probably technically possible to go through it in a weekend and write yourself a Scheme, but to really learn things in depth may take a bit longer.
I wasn't crazy about LYAH or RWH. They're both spreading too little butter over too much dry toast.
Haskell the Hard Way is small, dense, efficient, and enjoyable.
I think one of the more popular, but fundamental, mistakes in teaching Haskell is in thinking that the more important "revelations" are easier to convey if you hide them in a sea of noise and that doing so is the only alternative to impenetrable white papers.
LYAH is a chore. I got nowhere with it - it is tedious. After a cursory glance a few of us at my company are working through The Little MLer in Haskell instead. It seems to really be focussing on types and I think those kind of core concepts are important to grasp at the early stages.
More importantly, the Little Schemer and The Little MLer are aimed at non-programmers... yet programmers struggle with them. We should question why that is.
Yup, I didn't mean to open a negativity fest. It's a double edged sword with the shallow examples (e.g. calculating BMI). LYAH does a very good job of explaining every single detail in those lines of code, I've never left an example confused but at the same time the simplicity keeps you from having questions you want to explore.
I don't think this is a bad thing. In any mathematics class I ever excelled in I spent a lot of time mindlessly executing the mechanics and knowing the names and pieces that were relevant, once I knew all that it became very easy to see the interpretations and the applications.
I think I'll finish LYAH before doing one of these more application oriented tutorials.
To ameliorate my point; I use LYAH as a reference piece a lot. It's well written and is a really takes time over many subjects. I mostly wanted to make (badly!) a point that there are resources out there that will push experienced and non-experienced alike. And they don't need to be in the language you're looking to learn right now.
Either way - I hope to give Write Yourself a Scheme... a go sometime soon. Looks good.
A lot of programmers are so indoctrinated in the imperative programming model that a language like Scheme and the approach of the Little LISPer (I will always think of it by that title) hurts their brain upon first exposure. The less curious of them will say "this is stupid" and go back to their familiar world of Python or Ruby.
Definately need to do learnyouahaskell before reading this tutorial which is what I'm about to do. The link to how read is implemented doens't make any sense to me (coming from a procedural language background).
I suggest adding answers to the exercises or asking questions that are self contained in the tutorial.
blah :: Type + blah :: Type is gonna get parsed as blah :: (Type + blah :: Type), just add more parens there. Also, you need to convert the result back to a string before calling putStrLn.
From a comment there: http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H... is the maintained version.