
Two points: I have been with Haskell less than half a year, and already I have run into a layout-related bug in a tool that produces Haskell source.
Why not have your tool generate layout-less code? Surely that would be easier to program, and be less error prone.
Second, to a Lisp-head like myself something like (let ((a 0) (b 1)) (+ a b)) does exactly what you say: it uses layout to indicate semantic.
Yes, but the layout is not ENFORCED. I programmed in Lisp for many years before switching to Haskell, and a common error is something like this:
(let ((a 0) (b 1) (+ a b)))
In this case the error is relatively easy to spot, but in denser code it can be very subtle. So in fact using layout in Lisp can imply a semantics that is simply wrong. -Paul