diff options
| author | simonm <unknown> | 1998-02-02 17:35:59 +0000 |
|---|---|---|
| committer | simonm <unknown> | 1998-02-02 17:35:59 +0000 |
| commit | 28139aea50376444d56f43f0914291348a51a7e7 (patch) | |
| tree | 595c378188638ef16462972c1e7fcdb8409c7f16 /ghc/lib/std/PrelIO.lhs | |
| parent | 98a1ebecb6d22d793b1d9f8e1d24ecbb5a2d130f (diff) | |
| download | haskell-28139aea50376444d56f43f0914291348a51a7e7.tar.gz | |
[project @ 1998-02-02 17:27:26 by simonm]
Library re-organisation:
All libraries now live under ghc/lib, which has the following structure:
ghc/lib/std -- all prelude files (libHS.a)
ghc/lib/std/cbits
ghc/lib/exts -- standard Hugs/GHC extensions (libHSexts.a)
-- available with '-fglasgow-exts'
ghc/lib/posix -- POSIX library (libHSposix.a)
ghc/lib/posix/cbits -- available with '-syslib posix'
ghc/lib/misc -- used to be hslibs/ghc (libHSmisc.a)
ghc/lib/misc/cbits -- available with '-syslib misc'
ghc/lib/concurrent -- Concurrent libraries (libHSconc.a)
-- available with '-concurrent'
Also, several non-standard prelude modules had their names changed to begin
with 'Prel' to reduce namespace pollution.
Addr ==> PrelAddr (Addr interface available in 'exts')
ArrBase ==> PrelArr
CCall ==> PrelCCall (CCall interface available in 'exts')
ConcBase ==> PrelConc
GHCerr ==> PrelErr
Foreign ==> PrelForeign (Foreign interface available in 'exts')
GHC ==> PrelGHC
IOHandle ==> PrelHandle
IOBase ==> PrelIOBase
GHCmain ==> PrelMain
STBase ==> PrelST
Unsafe ==> PrelUnsafe
UnsafeST ==> PrelUnsafeST
Diffstat (limited to 'ghc/lib/std/PrelIO.lhs')
| -rw-r--r-- | ghc/lib/std/PrelIO.lhs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/ghc/lib/std/PrelIO.lhs b/ghc/lib/std/PrelIO.lhs new file mode 100644 index 0000000000..2de7d3b6b6 --- /dev/null +++ b/ghc/lib/std/PrelIO.lhs @@ -0,0 +1,78 @@ +% +% (c) The AQUA Project, Glasgow University, 1994-1996 +% + +\section[PrelIO]{Module @PrelIO@} + +Input/output functions mandated by the standard Prelude. + +\begin{code} +{-# OPTIONS -fno-implicit-prelude #-} + +module PrelIO ( + IO, FilePath, IOError, + fail, userError, catch, + putChar, putStr, putStrLn, print, + getChar, getLine, getContents, interact, + readFile, writeFile, appendFile, readIO, readLn + ) where + +import IO +import PrelHandle +import PrelIOBase +import PrelBase +import PrelRead + +\end{code} + +\begin{code} +putChar :: Char -> IO () +putChar c = hPutChar stdout c + +putStr :: String -> IO () +putStr s = hPutStr stdout s + +putStrLn :: String -> IO () +putStrLn s = do putStr s + putChar '\n' + +print :: Show a => a -> IO () +print x = putStrLn (show x) + +getChar :: IO Char +getChar = hGetChar stdin + +getLine :: IO String +getLine = hGetLine stdin + +getContents :: IO String +getContents = hGetContents stdin + +interact :: (String -> String) -> IO () +interact f = do s <- getContents + putStr (f s) + +readFile :: FilePath -> IO String +readFile name = openFile name ReadMode >>= hGetContents + +writeFile :: FilePath -> String -> IO () +writeFile name str + = openFile name WriteMode >>= \hdl -> hPutStr hdl str >> hClose hdl + +appendFile :: FilePath -> String -> IO () +appendFile name str + = openFile name AppendMode >>= \hdl -> hPutStr hdl str >> hClose hdl + +readIO :: Read a => String -> IO a + -- raises an exception instead of an error +readIO s = case [x | (x,t) <- reads s, ("","") <- lex t] of + [x] -> return x + [] -> fail (userError "PreludeIO.readIO: no parse") + _ -> fail (userError + "PreludeIO.readIO: ambiguous parse") + +readLn :: Read a => IO a +readLn = do l <- getLine + r <- readIO l + return r +\end{code} |
