IO library report

Ian Lynagh
Wed, 28 Nov 2001 18:31:59 +0000

The report has the following example:

    import IO

    main = do
             hSetBuffering stdout NoBuffering            
             putStr   "Enter an integer: "        
             x1 <- readNum 
             putStr   "Enter another integer: "          
             x2 <- readNum                          
             putStr  ("Their sum is " ++ show (x1+x2) ++ "\n")
           where readNum :: IO Integer
    -- Need a type signature for 
    -- readLn to avoid ambiguity
                 readNum = readLn

However, I believe that due to the monomorphism restriction and type
defaulting the type signature isn't actually required.

The next example:

    import IO
    import System

    main = do 
             [f1,f2] <- getArgs
             h1 <- openFile f1 ReadMode     
             h2 <- openFile f2 WriteMode 
             copyFile h1 h2            
             hClose h1                  
             hClose h2

    copyFile h1 h2 = do
                       eof <- hIsEOF h1
                       if eof then return () else
                            c <- hGetChar h1
                            hPutChar h2 (toUpper c)   
                            copyFile h1 h2

also requires Char to be imported for toUpper, as does the final example

    import System

    main = do
             [f1,f2] <- getArgs
             s <- readFile f1
             writeFile f2 (map toUpper s)

The section also doesn't follow the convention of the portable part of
the module definition being given at the end of the section.