How to nest let statements in Haskell?

Nico picture Nico · Apr 13, 2012 · Viewed 12.5k times · Source

I'm trying to nest a couple let statements, but I'm getting syntax errors that don't make sense to me. I'm really new to Haskell programming so I'm sure it's something I just don't understand (probably having to do with the spacing). I understand that let and in must be in the same column.

Why is it that:

aaa = let y = 1+2
          z = 4+6
      in y+z

Works perfectly fine, whereas

aaa = let y = 1+2
          z = 4+6
          in let f = 3
                 e = 3
             in e+f

gives me the error: "Syntax error in expression (unexpected `=')"

Answer

ehird picture ehird · Apr 13, 2012

In the second example, the z = ... isn't aligned with the y = .... In a let block, every definition has to be aligned.

I suspect you're indenting with tab characters, and have your editor set to display tabs as less than 8 spaces, making it look like it's aligned to you. You should replace the tab with spaces, and preferably set your editor to expand tabs into spaces to avoid problems like this in the future.