Mark Utting writes:
fb::IO () fb = do { putStr "Enter Data: "; line <- getLine; let line2 = line; putStr line2; }
ERROR "f.hs" (line 13): Syntax error in definition (unexpected symbol "putStr")
I find it hard to determine exactly from the Report whether this is a bug in Haskell, or just a bug in ghc. For what it's worth, nhc98 parses and accepts your example exactly as you intended.
Fix 3: I might be happy to put ALL the semicolons at the beginning of lines, which also works, but you are not allowed a semicolon at the beginning of the first brace, so this looks asymmetric. f3 = do { putStr "Enter Data: " ;line <- getLine ;let line2 = line ;putStr line2 }
A common style I have seen is do { putStr "Enter Data: " ; line <- getLine ; let line2 = line ; putStr line2 } which matches nicely what Sebastien Carlier proposed in his message:
Ideally, I would like an editor be able to draw a pretty square bracket (graphically, or with semi-graphic characters) around blocks, a bit like this:
f3 = do |~ putStr "Enter Data: " | line <- getLine | let line2 = line |_ putStr line2
Regards, Malcolm