
Hello! I am learning Haskell according to the "Yet Another Haskell Tutorial" by Hal Daume Ill. One of the exercises involves a) asking the user to enter several numbers (while the end of the sequence is indicated by entering 0) b) calculate the sum of those numbers. The program given below tries to do that. I can read a list of strings. Then, I try to convert the list of strings into a list of numbers by means of map. That is, given a list ["1","2","3"], I want to convert it into [1,2,3]. In GHCi, this is done via map read ["1","2","3"] However, when I apply this same call in my program below, I'm getting following error when loading the program in GHCi: <error-message> Loading package base ... linking ... done. Compiling Main ( AskForNumbers.hs, interpreted ) AskForNumbers.hs:10: Couldn't match `IO' against `[]' Expected type: IO t Inferred type: [b] In the application `map read words' In a 'do' expression: map read words Failed, modules loaded: none. </error-message> Line 10 corresponds to the statement map read words, which seems to work in GHCi. What am I doing wrongly? Thanks in advance Dmitri Pissarenko PS: What follows is my Haskell program. module Main where import IO main = do hSetBuffering stdin LineBuffering words <- askForNumbers printWords words map read words putStrLn "The sum is" foldl (+) 0 words askForNumbers = do putStrLn "Please enter a number:" text <- getLine if text == "" then return [] else if text == "0" then return [] else do rest <- askForNumbers return (text : rest) printWords [] = putStrLn "EOL" printWords (h : t) = do putStrLn h printWords t