
Hello, I have started reading "Yet Another Haskell Tutorial" by Hal Daum´e III which can be found here http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf One of the early examples in section 3.8 pg. 35 is this askForWords = do putStrLn "Please enter a word:" word <- getLine if word == "" then return [] else do rest <- askForWords return (word : rest) I want to print the returned list and everything I try fails. I have tried the following: printList l = if length l >= 1 then do putStrLn (head l) printList (tail l) else putStrLn("") f = printList askForWords and I get Expression : printList askForWords *** Term : askForWords *** Type : IO [[Char]] *** Does not match : [[Char]] ************************************* The exercise right below this asks for a very slight modification to read numbers instead. However, I am confused about how to convert strings to numbers. If I type in the hugs interactive console read "5" + 3 --> 8 -- ok perfect However read "5" gives ERROR - Unresolved overloading *** Type : Read a => a *** Expression : read "5" Yet page 33 of the tutorial has the following code: doGuessing num = do putStrLn "Enter your guess:" guess <- getLine let guessNum = read guess -- ok in let stmt, but not at repl prompt? Anyway I take the info that has been presented and create this function: askForNumbers = do hSetBuffering stdin LineBuffering putStrLn "Give me a number (or 0 to stop)" numStr <- getLine let num = read numStr if num == 0 then return [] else do rest <- askForNumbers return (num : rest) However, when I try to use it, like say map sqrt askForNumbers ERROR - Type error in application *** Expression : map sqrt askForNumbers *** Term : askForNumbers *** Type : IO [Integer] *** Does not match : [a] ********************************************************* Is there a way to write printList to handle Strings or numbers? Or should I write printList (map show askForNumbers) Thanks, Jeff