Hi all,

I've written a Haskell tutorial that walks the reader through the implementation of a Scheme interpreter:

http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html

Instead of focusing on small examples at the Haskell REPL, it tries to show the reader how to construct a real program with Haskell.  It introduces monads and IO early, and also includes error checking, state, file I/O, and all the other "hard stuff" that's frequently omitted from beginner tutorials.

Am looking for feedback on two main axes:

1.) Experienced Haskell users: is this more-or-less idiomatic Haskell?  Did I miss any library or language features that could make the programmer's job easier?  It was my first substantial Haskell program, so I worry that I may have missed some common ways of doing things.

2.) Novices: is it clear and easy to understand?  I had a tough time figuring out how to do anything practical in Haskell, because most tutorials omit IO, gloss over monads, and don't pay any attention to state or error-checking.  Does this rectify those shortcomings?

Comments/critiques are appreciated.

Regards,
Jonathan