read -package:tar -package:hedgehog package:io-streams

Reads one value from an InputStream. Returns either a value wrapped in a Just, or Nothing if the end of the stream is reached.
Reads an n-byte ByteString from an input stream. Throws a ReadTooShortException if fewer than n bytes were available. Example:
ghci> Streams.fromList ["long string"] >>= Streams.readExactly 6
"long s"
ghci> Streams.fromList ["short"] >>= Streams.readExactly 6
*** Exception: Short read, expected 6 bytes
readProcess forks an external process, reads its standard output strictly, blocking until the process terminates, and returns the output string. The external process inherits the standard error. If an asynchronous exception is thrown to the thread executing readProcess, the forked process will be terminated and readProcess will wait (block) until the process has been terminated. Output is returned strictly, so this is not suitable for launching processes that require interaction over the standard file streams. This function throws an IOError if the process ExitCode is anything other than ExitSuccess. If instead you want to get the ExitCode then use readProcessWithExitCode. Users of this function should compile with -threaded if they want other Haskell threads to keep running while waiting on the result of readProcess.
> readProcess "date" [] []
"Thu Feb  7 10:03:39 PST 2008\n"
The arguments are:
  • The command to run, which must be in the $PATH, or an absolute or relative path
  • A list of separate command line arguments to the program
  • A string to pass on standard input to the forked process.
readProcessWithExitCode is like readProcess but with two differences:
  • it returns the ExitCode of the process, and does not throw any exception if the code is not ExitSuccess.
  • it reads and returns the output from process' standard error handle, rather than the process inheriting the standard error handle.
On Unix systems, see waitForProcess for the meaning of exit codes when the process died as the result of a signal.
Thrown by readExactly and takeExactly when not enough bytes were available on the input.
Pushes a value back onto an input stream. read and unRead should satisfy the following law, with the possible exception of side effects:
Streams.unRead c stream >> Streams.read stream === return (Just c)
Note that this could be used to add values back to the stream that were not originally drawn from the stream.
Thrown by throwIfProducesMoreThan when too many bytes were read from the original InputStream.