
Andy, Just a quick hack: module Main where import List -- ADDED import Graphics.UI.GLUT -- ADDED readVecs :: String -> IO [Vector3 GLfloat] readVecs f = do str <- readFile f -- FIXED LAYOUT: let mkVec [x,y,z] = Vector3 x y z let format line = "[" ++ concat (intersperse "," (words line)) ++ "]" -- ADDED return $ map (mkVec . read . format) $ lines str -- CORRECTED So, the error message you got was layout-related, i.e., you needed to move the last two lines of you programs two positions to the left. Furthermore, you had to import the HOpenGL modules. Even then, your code did not type check, so I replaced the application of words in the last line by an application to a user-defined function format, that not even makes it type check but also makes it actually reformat the input so it can be consumed by read. I used intersperse to do this, so I also needed to import the List module. But, seriously, do you really think this is the way to learn Haskell?
And just one last question - If the file looked like this (with column headings )
Name Ethnicity Age Mary_Smith NZ_European 27 Joe_Brown NZ_European 34 John_Watson Canadian 45 Mike_Tangaroa NZ_Maori 38
- what change would the above code need to run?
I hope you don't mind I leave this to you as an exercise. HTH, Stefan