Here is the list of twenty questions I had about Haskell lexical and syntax structure which I presented to the East Anglia Workshop in September. I didn't get a great deal of consensus then, and talking to Ian Holyer (who had a similar list) today, I'm reminded to submit them to further scrutiny. Most of them revolve around the transition into and out of various different lexically determined parts of the language; in particular free-form and layout (although I also use comment and string tokenization quite a bit). So which of the following twenty programs are syntactically legal 1.2 (or 1.3) Haskell programs, and why? Answers next week, --- David Lester, Dept CS, Manchester University, Manchester M13 9PL UK. -- begin 1 -- -- end 1 -- -- begin 2 -- {} -- end 2 -- -- begin 3 -- main = print "\'" -- end 3 -- -- begin 4 -- main = print '\"' -- end 4 -- -- begin 5 -- main = print "5\ \\n" -- end 5 -- -- begin 6 -- s = "6\ \\n" main = print s -- end 6 -- -- begin 7 -- main = print ("#" ++ "7\n") -- end 7 -- -- begin 8 -- main = print s where {s = case () of _ -> "8\n"} -- end 8 -- -- begin 9 -- main = print s where {s = case () of _ -> "9\n" } -- end 9 -- -- begin 10 -- main = let {s=t where t = "10\n"} in print s -- end 10 -- -- begin 11 -- main = let {s=t where t = "11\n"} in print s -- end 11 -- -- begin 12 -- main = let {s=t where t = "12\n"} in print s -- end 12 -- -- begin 13 -- main = let {s=t where t = "12\n"} {- -} in print s -- end 13 -- -- begin 14 -- main = print s s = if True then case () of "14\n" else "error\n" -- end 14 -- -- begin 15 -- main = case "" of (x:xs) -> "error\n" [] -> case () of _ -> print "15\n" -- end 15 -- -- begin 16 -- main = case "" of (x:xs) -> "error\n" [] -> case () of _ -> print "16\n" -- end 16 -- -- begin 17 -- main = case "" of [] -> case () of _ -> print "17\n" (x:xs) -> "error\n" -- end 17 -- -- begin 18 -- main = case "" of (x:xs) -> "error\n" {- -} [] -> "18\n" -- end 18 -- -- begin 19 -- main = print "19\n" module A where loop = loop -- end 19 -- -- begin 20 -- module Main where main = print "20\n" module A where loop = loop -- end 20 --