IO

s.7.1 p.98 RR, I/O
Output Functions ...
putChar  :: Char -> IO ()
putStr   :: String -> IO ()
putStrLn :: String -> IO ()   -- adds a newline
print    :: Show a => a -> IO ()

Recall that (IO τ) is a Monad (s.7.2 pp.99 RR), so that >>, etc. are applicable to it. The " main program", main, must be of type (IO τ) for some type τ.

main = putStr "Hello " >> putStr "World."
       ---------------    ---------------
           IO ()              IO ()
       ----------------------------------
                     IO ()

Input Functions ...
getChar     :: IO Char     -- exception on EOF
getLine     :: IO String   -- ditto
getContents :: IO String
interact    :: (String -> String) -> IO ()
readIO      :: Read a => String -> IO a
readLn      :: Read a => IO a

In input step passes a value on to the next step after >>=

... getChar  >>=  putChar  ...
    -------       -------
    IO Char      Char->IO()
    -----------------------
              IO ()


IO type, s.8.1. prelude, p.111, RR
 
data IO a = ...abstract
 
instance Functor IO where
  fmap f x = x >>= (return . f)
 
instance Monad IO where
  (>>=) = ...
  return = ...
  fail s = ioError (userError s)

RR = revised report, CUP, 2003.

7/2002, 11/2005