Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Precursor.System.IO
Contents
- data IO a :: * -> *
- class Monad m => MonadIO m where
- liftIO :: MonadIO m => forall a. IO a -> m a
- type FilePath = String
- readFile :: MonadIO m => FilePath -> m Text
- writeFile :: MonadIO m => FilePath -> Text -> m ()
- appendFile :: MonadIO m => FilePath -> Text -> m ()
- interact :: MonadIO m => (Text -> Text) -> m ()
- getContents :: MonadIO m => m Text
- getLine :: MonadIO m => m Text
- putStr :: MonadIO m => Text -> m ()
- putStrLn :: MonadIO m => Text -> m ()
The IO monad
A value of type
is a computation which, when performed,
does some I/O before returning a value of type IO
aa
.
There is really only one way to "perform" an I/O action: bind it to
Main.main
in your program. When your program is run, the I/O will
be performed. It isn't possible to perform I/O from an arbitrary
function, unless that function is itself in the IO
monad and called
at some point, directly or indirectly, from Main.main
.
IO
is a monad, so IO
actions can be combined using either the do-notation
or the >>
and >>=
operations from the Monad
class.
IO class
class Monad m => MonadIO m where #
Monads in which IO
computations may be embedded.
Any monad built by applying a sequence of monad transformers to the
IO
monad will be an instance of this class.
Instances should satisfy the following laws, which state that liftIO
is a transformer of monads:
Minimal complete definition
Files and handles
File and directory names are values of type String
, whose precise
meaning is operating system dependent. Files can be opened, yielding a
handle which can then be used to operate on the contents of that file.
File-at-a-time operations
readFile :: MonadIO m => FilePath -> m Text Source #
Read a file and return its contents as a string. The file is
read lazily, as with getContents
.
writeFile :: MonadIO m => FilePath -> Text -> m () Source #
Write a string to a file. The file is truncated to zero length before writing begins.
Special cases for standard input and output
interact :: MonadIO m => (Text -> Text) -> m () Source #
The interact
function takes a function of type Text -> Text
as its argument. The entire input from the standard input device is
passed (lazily) to this function as its argument, and the resulting
string is output on the standard output device.
getContents :: MonadIO m => m Text Source #
Lazily read all user input on stdin
as a single string.