
Hi Andrew,
Also remember that evaluating an expression in Haskell is _really_ hard!
Really? Looks pretty damn simple to me...
In that case I throw down the challenge of writing an interpetter that takes a Haskell syntax tree and evaluates it :) What is the value of show [] ? Remember that show ([] :: String) /= show ([] :: [Bool), so I can't see how you can drop the types and keep the semantics. I would love to write a Haskell interpretter which didn't deal with types (crashing at runtime for ill-typed is fine) - unfortunately I couldn't make it work because of this. If you figured it out, please share!
Oh, yeah, well, definitely the hardest part is *parsing* Haskell. In particular, the fact that layout exists makes this problem essentually unsolvable.
I'd say the type checking was much harder. The problem of desugaring is broad, but in most cases isn't that complex. Thanks Neil