Main Contents

Haskell and Tabs

haskell, software development

Today, I learned Haskell doesn’t like tabs. Haskell apparently uses some syntax conventions to connote things like blocks. I was working my way through a Haskell tutorial when I found the following snippet of code kept getting compiler errors:

fails
main = do putStr “You are? ”
          name <- getLine
          greet name

Turns out you can also enclose a block in angle brackets so this code worked

compiles
main = do { putStr “You are? “;
name <- getLine;
greet name }

Then it dawned on me. My TextMate Haskell setting were showing Hard Tabs instead of Soft Tabs with spaces. Flipping it to use spaces made the same code pass compilation.

compiles
main = do putStr “You are? ”
          name <- getLine
          greet name

Experimenting with lining up the arguments after the do showed that all of the statements had to line up vertically. Thus this reasonable looking syntax would fail:

fails
main = do putStr  “You are? ”
                  name <- getLine
                  greet name

I’m still very much at the beginnings of digging into Haskell, but it’s nice to play around with a language purely for intellectual curiosity.

Ed Gibbs @ February 24, 2007

Leave a comment


Feed