Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 94a4f7d3ef121dc9291cc0566822165d > files > 168

ghc-MissingH-devel-1.1.0.3-2.fc14.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>System.IO.HVIO</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_System-IO-HVIO.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>MissingH-1.1.0.3: Large utility library</TD
><TD CLASS="topbut"
><A HREF="src/System-IO-HVIO.html"
>Source code</A
></TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>System.IO.HVIO</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>provisional</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>John Goerzen &lt;jgoerzen@complete.org&gt;</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>Implementation Classes
</A
></DT
><DT
><A HREF="#2"
>Standard HVIO Implementations
</A
></DT
><DD
><DL
><DT
><A HREF="#3"
>Handle
</A
></DT
><DT
><A HREF="#4"
>Stream Reader
</A
></DT
><DT
><A HREF="#5"
>Memory Buffer
</A
></DT
><DT
><A HREF="#6"
>Haskell Pipe
</A
></DT
></DL
></DD
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>Haskell Virtual I/O -- a system to increase the flexibility of input and
output in Haskell
</P
><P
>Copyright (c) 2004-2005 John Goerzen, jgoerzen@complete.org
</P
><P
>HVIO provides the following general features:
</P
><UL
><LI
> The ability to use a single set of functions on various different
   types of objects, including standard Handles, in-memory buffers,
   compressed files, network data streams, etc.
</LI
><LI
> The ability to transparently add filters to the I/O process.
   These filters could include things such as character set conversions,
   compression or decompression of a data stream, and more.
</LI
><LI
> The ability to define new objects that have the properties
   of I/O objects and can be used interchangably with them.
</LI
><LI
> Specification compatibility with, and complete support for,
   existing I/O on Handles.
</LI
><LI
> Provide easier unit testing capabilities for I/O actions
</LI
></UL
><P
>HVIO defines several basic type classes that you can use.  You will mostly
be interested in <TT
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
></TT
>.
</P
><P
>It's trivial to adapt old code to work with HVIO.  For instance, consider
this example of old and new code:
</P
><PRE
>printMsg :: Handle -&gt; String -&gt; IO ()
printMsg h msg = hPutStr h (&quot;msg: &quot; ++ msg)
</PRE
><P
>And now, the new way:
</P
><PRE
>printMsg :: HVIO h =&gt; h -&gt; String -&gt; IO ()
printMsg h msg = vPutStr h (&quot;msg: &quot; ++ msg)
</PRE
><P
>There are several points to note about this conversion:
</P
><UL
><LI
> The new method can still accept a Handle in exactly the same way as
   the old method.  Changing your functions to use HVIO will require no
   changes from functions that call them with Handles.
</LI
><LI
> Most &quot;h&quot; functions have equivolent &quot;v&quot; functions that operate
   on HVIO classes instead of the more specific Handle.  The &quot;v&quot; functions
   behave identically to the &quot;h&quot; functions whenever possible.
</LI
><LI
> There is no equivolent of &quot;openFile&quot; in any HVIO class.  You must
   create your Handle (or other HVIO object) using normal means.
   This is because the creation is so different that it cannot be standardized.
</LI
></UL
><P
>In addition to Handle, there are several pre-defined classes for your use.
<TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
> is a particularly interesting one.  At creation time, you pass
it a String.  Its contents are read lazily whenever a read call is made.  It
can be used, therefore, to implement filters (simply initialize it with the
result from, say, a map over hGetContents from another HVIO object), codecs,
and simple I/O testing.  Because it is lazy, it need not hold the entire
string in memory.  You can create a <TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
> with a call to
<TT
><A HREF="System-IO-HVIO.html#v%3AnewStreamReader"
>newStreamReader</A
></TT
>.
</P
><P
><TT
><A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TT
> is a similar class, but with a different purpose.  It provides
a full interface like Handle (it implements HVIOReader, HVIOWriter,
and HVIOSeeker).  However, it maintains an in-memory buffer with the
contents of the file, rather than an actual on-disk file.  You can access
the entire contents of this buffer at any time.  This can be quite useful
for testing I/O code, or for cases where existing APIs use I/O, but you
prefer a String representation.  You can create a <TT
><A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TT
> with a call
to <TT
><A HREF="System-IO-HVIO.html#v%3AnewMemoryBuffer"
>newMemoryBuffer</A
></TT
>.
</P
><P
>Finally, there are pipes.  These pipes are analogous to the Unix
pipes that are available from System.Posix, but don't require Unix and work
only in Haskell.  When you create a pipe, you actually get two HVIO objects:
a <TT
><A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TT
> and a <TT
><A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TT
>.  You must use the <TT
><A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TT
> in one
thread and the <TT
><A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TT
> in another thread.  Data that's written to the
<TT
><A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TT
> will then be available for reading with the <TT
><A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TT
>.  The
pipes are implemented completely with existing Haskell threading primitives,
and require no special operating system support.  Unlike Unix pipes, these
pipes cannot be used across a fork().  Also unlike Unix pipes, these pipes
are portable and interact well with Haskell threads.  A new pipe can be created
with a call to <TT
><A HREF="System-IO-HVIO.html#v%3AnewHVIOPipe"
>newHVIOPipe</A
></TT
>.
</P
><P
>Together with <A HREF="System-IO-HVFS.html"
>System.IO.HVFS</A
>, this module is part of a complete
virtual filesystem solution.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> a =&gt; <A HREF="#t%3AHVIO"
>HVIO</A
> a  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3AvClose"
>vClose</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvIsOpen"
>vIsOpen</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvIsClosed"
>vIsClosed</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvTestOpen"
>vTestOpen</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvIsEOF"
>vIsEOF</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvShow"
>vShow</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvMkIOError"
>vMkIOError</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO-Error.html#t%3AIOErrorType"
>IOErrorType</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="System-IO-HVFS.html#t%3AFilePath"
>FilePath</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO-Error.html#t%3AIOError"
>IOError</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvThrow"
>vThrow</A
> ::  a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO-Error.html#t%3AIOErrorType"
>IOErrorType</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> b</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvGetFP"
>vGetFP</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="System-IO-HVFS.html#t%3AFilePath"
>FilePath</A
>)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvTestEOF"
>vTestEOF</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvGetChar"
>vGetChar</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar"
>Char</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvGetLine"
>vGetLine</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvGetContents"
>vGetContents</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvReady"
>vReady</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvIsReadable"
>vIsReadable</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvPutChar"
>vPutChar</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar"
>Char</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvPutStr"
>vPutStr</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvPutStrLn"
>vPutStrLn</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvPrint"
>vPrint</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> b =&gt; a -&gt; b -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvFlush"
>vFlush</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvIsWritable"
>vIsWritable</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvSeek"
>vSeek</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Device.html#t%3ASeekMode"
>SeekMode</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AInteger"
>Integer</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvTell"
>vTell</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AInteger"
>Integer</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvRewind"
>vRewind</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvIsSeekable"
>vIsSeekable</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvSetBuffering"
>vSetBuffering</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3ABufferMode"
>BufferMode</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvGetBuffering"
>vGetBuffering</A
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3ABufferMode"
>BufferMode</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvPutBuf"
>vPutBuf</A
> ::  a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> b -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvGetBuf"
>vGetBuf</A
> ::  a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> b -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AStreamReader"
>StreamReader</A
> </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewStreamReader"
>newStreamReader</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AMemoryBuffer"
>MemoryBuffer</A
> </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewMemoryBuffer"
>newMemoryBuffer</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
>) -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmbDefaultCloseFunc"
>mbDefaultCloseFunc</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AgetMemoryBuffer"
>getMemoryBuffer</A
> :: <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3APipeReader"
>PipeReader</A
> </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3APipeWriter"
>PipeWriter</A
> </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewHVIOPipe"
>newHVIOPipe</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
>, <A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
>)</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
><A NAME="1"
>Implementation Classes
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> a =&gt; <A NAME="t:HVIO"
><A NAME="t%3AHVIO"
></A
></A
><B
>HVIO</B
> a  <SPAN CLASS="keyword"
>where</SPAN
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#HVIO"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>This is the generic I/O support class.  All objects that are to be used
in the HVIO system must provide an instance of <TT
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
></TT
>.
</P
><P
>Functions in this class provide an interface with the same specification as
the similar functions in System.IO.  Please refer to that documentation
for a more complete specification than is provided here.
</P
><P
>Instances of <TT
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
></TT
> must provide <TT
><A HREF="System-IO-HVIO.html#v%3AvClose"
>vClose</A
></TT
>, <TT
><A HREF="System-IO-HVIO.html#v%3AvIsEOF"
>vIsEOF</A
></TT
>, and either
<TT
><A HREF="System-IO-HVIO.html#v%3AvIsOpen"
>vIsOpen</A
></TT
> or <TT
><A HREF="System-IO-HVIO.html#v%3AvIsClosed"
>vIsClosed</A
></TT
>.
</P
><P
>Implementators of readable objects must provide at least <TT
><A HREF="System-IO-HVIO.html#v%3AvGetChar"
>vGetChar</A
></TT
>
and <TT
><A HREF="System-IO-HVIO.html#v%3AvIsReadable"
>vIsReadable</A
></TT
>.
An implementation of <TT
><A HREF="System-IO-HVIO.html#v%3AvGetContents"
>vGetContents</A
></TT
> is also highly suggested, since
the default cannot implement proper partial closing semantics.
</P
><P
>Implementators of writable objects must provide at least <TT
><A HREF="System-IO-HVIO.html#v%3AvPutChar"
>vPutChar</A
></TT
> and
<TT
><A HREF="System-IO-HVIO.html#v%3AvIsWritable"
>vIsWritable</A
></TT
>.
</P
><P
>Implementators of seekable objects must provide at least
<TT
><A HREF="System-IO-HVIO.html#v%3AvIsSeekable"
>vIsSeekable</A
></TT
>, <TT
><A HREF="System-IO-HVIO.html#v%3AvTell"
>vTell</A
></TT
>, and <TT
><A HREF="System-IO-HVIO.html#v%3AvSeek"
>vSeek</A
></TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
>Methods</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vClose"
><A NAME="v%3AvClose"
></A
></A
><B
>vClose</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vClose"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Close a file
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vIsOpen"
><A NAME="v%3AvIsOpen"
></A
></A
><B
>vIsOpen</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vIsOpen"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Test if a file is open
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vIsClosed"
><A NAME="v%3AvIsClosed"
></A
></A
><B
>vIsClosed</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vIsClosed"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Test if a file is closed
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vTestOpen"
><A NAME="v%3AvTestOpen"
></A
></A
><B
>vTestOpen</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vTestOpen"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Raise an error if the file is not open.
 This is a new HVIO function and is implemented in terms of
 <TT
><A HREF="System-IO-HVIO.html#v%3AvIsOpen"
>vIsOpen</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vIsEOF"
><A NAME="v%3AvIsEOF"
></A
></A
><B
>vIsEOF</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vIsEOF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Whether or not we're at EOF.  This may raise on exception
 on some items, most notably write-only Handles such as stdout.
 In general, this is most reliable on items opened for reading.
 vIsEOF implementations must implicitly call vTestOpen.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vShow"
><A NAME="v%3AvShow"
></A
></A
><B
>vShow</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vShow"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Detailed show output.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vMkIOError"
><A NAME="v%3AvMkIOError"
></A
></A
><B
>vMkIOError</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO-Error.html#t%3AIOErrorType"
>IOErrorType</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="System-IO-HVFS.html#t%3AFilePath"
>FilePath</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO-Error.html#t%3AIOError"
>IOError</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vMkIOError"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Make an IOError.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vThrow"
><A NAME="v%3AvThrow"
></A
></A
><B
>vThrow</B
> ::  a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO-Error.html#t%3AIOErrorType"
>IOErrorType</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> b</TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vThrow"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Throw an IOError.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vGetFP"
><A NAME="v%3AvGetFP"
></A
></A
><B
>vGetFP</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="System-IO-HVFS.html#t%3AFilePath"
>FilePath</A
>)</TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vGetFP"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Get the filename/object/whatever that this corresponds to.
 May be Nothing.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vTestEOF"
><A NAME="v%3AvTestEOF"
></A
></A
><B
>vTestEOF</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vTestEOF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Throw an isEOFError if we're at EOF; returns nothing otherwise.
 If an implementation overrides the default, make sure that it
 calls vTestOpen at some point.  The default implementation is
 a wrapper around a call to <TT
><A HREF="System-IO-HVIO.html#v%3AvIsEOF"
>vIsEOF</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vGetChar"
><A NAME="v%3AvGetChar"
></A
></A
><B
>vGetChar</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar"
>Char</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vGetChar"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Read one character
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vGetLine"
><A NAME="v%3AvGetLine"
></A
></A
><B
>vGetLine</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vGetLine"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Read one line
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vGetContents"
><A NAME="v%3AvGetContents"
></A
></A
><B
>vGetContents</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vGetContents"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Get the remaining contents.  Please note that as a user of this
       function, the same partial-closing semantics as are used in the
       standard <TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#v%3AhGetContents"
>hGetContents</A
></TT
> are <EM
>encouraged</EM
> from implementators,
       but are not <EM
>required</EM
>.  That means that, for instance,
       a <TT
><A HREF="System-IO-HVIO.html#v%3AvGetChar"
>vGetChar</A
></TT
> after a <TT
><A HREF="System-IO-HVIO.html#v%3AvGetContents"
>vGetContents</A
></TT
> may return some undefined
       result instead of the error you would normally get.  You should
       use caution to make sure your code doesn't fall into that trap,
       or make sure to test your code with Handle or one of the
       default instances defined in this module.  Also, some implementations
       may essentially provide a complete close after a call to <TT
><A HREF="System-IO-HVIO.html#v%3AvGetContents"
>vGetContents</A
></TT
>.
       The bottom line: after a call to <TT
><A HREF="System-IO-HVIO.html#v%3AvGetContents"
>vGetContents</A
></TT
>, you should do nothing
       else with the object save closing it with <TT
><A HREF="System-IO-HVIO.html#v%3AvClose"
>vClose</A
></TT
>.
</P
><P
>For implementators, you are highly encouraged to provide a correct
       implementation. 
</P
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vReady"
><A NAME="v%3AvReady"
></A
></A
><B
>vReady</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vReady"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Indicate whether at least one item is ready for reading.
 This will always be True for a great many implementations.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vIsReadable"
><A NAME="v%3AvIsReadable"
></A
></A
><B
>vIsReadable</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vIsReadable"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Indicate whether a particular item is available for reading.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vPutChar"
><A NAME="v%3AvPutChar"
></A
></A
><B
>vPutChar</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar"
>Char</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vPutChar"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Write one character
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vPutStr"
><A NAME="v%3AvPutStr"
></A
></A
><B
>vPutStr</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vPutStr"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Write a string
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vPutStrLn"
><A NAME="v%3AvPutStrLn"
></A
></A
><B
>vPutStrLn</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vPutStrLn"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Write a string with newline character after it
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vPrint"
><A NAME="v%3AvPrint"
></A
></A
><B
>vPrint</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> b =&gt; a -&gt; b -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vPrint"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Write a string representation of the argument, plus a newline.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vFlush"
><A NAME="v%3AvFlush"
></A
></A
><B
>vFlush</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vFlush"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Flush any output buffers.
 Note: implementations should assure that a vFlush is automatically
 performed
 on file close, if necessary to ensure all data sent is written.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vIsWritable"
><A NAME="v%3AvIsWritable"
></A
></A
><B
>vIsWritable</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vIsWritable"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Indicate whether or not this particular object supports writing.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vSeek"
><A NAME="v%3AvSeek"
></A
></A
><B
>vSeek</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Device.html#t%3ASeekMode"
>SeekMode</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AInteger"
>Integer</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vSeek"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Seek to a specific location.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vTell"
><A NAME="v%3AvTell"
></A
></A
><B
>vTell</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AInteger"
>Integer</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vTell"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Get the current position.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vRewind"
><A NAME="v%3AvRewind"
></A
></A
><B
>vRewind</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vRewind"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Convenience function to reset the file pointer to the beginning
 of the file.  A call to <TT
>vRewind h</TT
> is the
 same as <TT
><TT
><A HREF="System-IO-HVIO.html#v%3AvSeek"
>vSeek</A
></TT
> h AbsoluteSeek 0</TT
>.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vIsSeekable"
><A NAME="v%3AvIsSeekable"
></A
></A
><B
>vIsSeekable</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vIsSeekable"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Indicate whether this instance supports seeking.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vSetBuffering"
><A NAME="v%3AvSetBuffering"
></A
></A
><B
>vSetBuffering</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3ABufferMode"
>BufferMode</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vSetBuffering"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Set buffering; the default action is a no-op.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vGetBuffering"
><A NAME="v%3AvGetBuffering"
></A
></A
><B
>vGetBuffering</B
> :: a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3ABufferMode"
>BufferMode</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vGetBuffering"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Get buffering; the default action always returns NoBuffering.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vPutBuf"
><A NAME="v%3AvPutBuf"
></A
></A
><B
>vPutBuf</B
> ::  a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> b -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vPutBuf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Binary output: write the specified number of octets from the specified
 buffer location.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:vGetBuf"
><A NAME="v%3AvGetBuf"
></A
></A
><B
>vGetBuf</B
> ::  a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> b -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#vGetBuf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Binary input: read the specified number of octets from the
 specified buffer location, continuing to read
 until it either consumes that much data or EOF is encountered.
 Returns the number of octets actually read.  EOF errors are never
 raised; fewer bytes than requested are returned on EOF.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:HVIO')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:HVIO" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3AHandle"
>Handle</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
><A NAME="2"
>Standard HVIO Implementations
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="3"
><A NAME="3"
>Handle
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
>Handle is a member of <TT
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
><A NAME="4"
>Stream Reader
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:StreamReader"
><A NAME="t%3AStreamReader"
></A
></A
><B
>StreamReader</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#StreamReader"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>Simulate I/O based on a string buffer.
</P
><P
>When a <TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
> is created, it is initialized based on the contents of
a <TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TT
>.  Its contents are read lazily whenever a request is made to read
something from the <TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
>.    It
can be used, therefore, to implement filters (simply initialize it with the
result from, say, a map over hGetContents from another HVIO object), codecs,
and simple I/O testing.  Because it is lazy, it need not hold the entire
string in memory.  You can create a <TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
> with a call to
<TT
><A HREF="System-IO-HVIO.html#v%3AnewStreamReader"
>newStreamReader</A
></TT
>.
</P
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:StreamReader')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:StreamReader" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:newStreamReader"
><A NAME="v%3AnewStreamReader"
></A
></A
><B
>newStreamReader</B
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#newStreamReader"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="rdoc"
>Initial contents of the <TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Create a new <TT
><A HREF="System-IO-HVIO.html#t%3AStreamReader"
>StreamReader</A
></TT
> object. 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
><A NAME="5"
>Memory Buffer
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:MemoryBuffer"
><A NAME="t%3AMemoryBuffer"
></A
></A
><B
>MemoryBuffer</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#MemoryBuffer"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>A <TT
><A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TT
> simulates true I/O, but uses an in-memory buffer instead
of on-disk storage.
</P
><P
>It provides
a full interface like Handle (it implements HVIOReader, HVIOWriter,
and HVIOSeeker).  However, it maintains an in-memory buffer with the
contents of the file, rather than an actual on-disk file.  You can access
the entire contents of this buffer at any time.  This can be quite useful
for testing I/O code, or for cases where existing APIs use I/O, but you
prefer a String representation.  You can create a <TT
><A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TT
> with a call
to <TT
><A HREF="System-IO-HVIO.html#v%3AnewMemoryBuffer"
>newMemoryBuffer</A
></TT
>.
</P
><P
>The present <TT
><A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TT
> implementation is rather inefficient, particularly
when reading towards the end of large files.  It's best used for smallish
data storage.  This problem will be fixed eventually.
</P
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:MemoryBuffer')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:MemoryBuffer" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:newMemoryBuffer"
><A NAME="v%3AnewMemoryBuffer"
></A
></A
><B
>newMemoryBuffer</B
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#newMemoryBuffer"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="rdoc"
>Initial Contents
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="rdoc"
>close func
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>Create a new <TT
><A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
></TT
> instance.  The buffer is initialized
to the value passed, and the pointer is placed at the beginning of the file.
</P
><P
>You can put things in it by using the normal <TT
><A HREF="System-IO-HVIO.html#v%3AvPutStr"
>vPutStr</A
></TT
> calls, and reset to
the beginning by using the normal <TT
><A HREF="System-IO-HVIO.html#v%3AvRewind"
>vRewind</A
></TT
> call.
</P
><P
>The function is called when <TT
><A HREF="System-IO-HVIO.html#v%3AvClose"
>vClose</A
></TT
> is called, and is passed the contents of
the buffer at close time.  You can use <TT
><A HREF="System-IO-HVIO.html#v%3AmbDefaultCloseFunc"
>mbDefaultCloseFunc</A
></TT
> if you don't want to
do anything.
</P
><P
>To create an empty buffer, pass the initial value <TT
>&quot;&quot;</TT
>. 
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:mbDefaultCloseFunc"
><A NAME="v%3AmbDefaultCloseFunc"
></A
></A
><B
>mbDefaultCloseFunc</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#mbDefaultCloseFunc"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Default (no-op) memory buf close function. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:getMemoryBuffer"
><A NAME="v%3AgetMemoryBuffer"
></A
></A
><B
>getMemoryBuffer</B
> :: <A HREF="System-IO-HVIO.html#t%3AMemoryBuffer"
>MemoryBuffer</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#getMemoryBuffer"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Grab the entire contents of the buffer as a string.
Unlike <TT
><A HREF="System-IO-HVIO.html#v%3AvGetContents"
>vGetContents</A
></TT
>, this has no effect on the open status of the
item, the EOF status, or the current position of the file pointer. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="6"
><A NAME="6"
>Haskell Pipe
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:PipeReader"
><A NAME="t%3APipeReader"
></A
></A
><B
>PipeReader</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#PipeReader"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>The reading side of a Haskell pipe.  Please see <TT
><A HREF="System-IO-HVIO.html#v%3AnewHVIOPipe"
>newHVIOPipe</A
></TT
> for more
details. 
</TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:PipeReader')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:PipeReader" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:PipeWriter"
><A NAME="t%3APipeWriter"
></A
></A
><B
>PipeWriter</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#PipeWriter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>The writing side of a Haskell pipe.  Please see <TT
><A HREF="System-IO-HVIO.html#v%3AnewHVIOPipe"
>newHVIOPipe</A
></TT
> for more
details. 
</TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:PipeWriter')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:PipeWriter" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="System-IO-HVIO.html#t%3AHVIO"
>HVIO</A
> <A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:newHVIOPipe"
><A NAME="v%3AnewHVIOPipe"
></A
></A
><B
>newHVIOPipe</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
>, <A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
>)</TD
><TD CLASS="declbut"
><A HREF="src/System-IO-HVIO.html#newHVIOPipe"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Create a Haskell pipe.
</P
><P
>These pipes are analogous to the Unix
pipes that are available from System.Posix, but don't require Unix and work
only in Haskell.  When you create a pipe, you actually get two HVIO objects:
a <TT
><A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TT
> and a <TT
><A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TT
>.  You must use the <TT
><A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TT
> in one
thread and the <TT
><A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TT
> in another thread.  Data that's written to the
<TT
><A HREF="System-IO-HVIO.html#t%3APipeWriter"
>PipeWriter</A
></TT
> will then be available for reading with the <TT
><A HREF="System-IO-HVIO.html#t%3APipeReader"
>PipeReader</A
></TT
>.  The
pipes are implemented completely with existing Haskell threading primitives,
and require no special operating system support.  Unlike Unix pipes, these
pipes cannot be used across a fork().  Also unlike Unix pipes, these pipes
are portable and interact well with Haskell threads. 
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.6.1</TD
></TR
></TABLE
></BODY
></HTML
>