<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Text.Read</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[ window.onload = function () {pageLoad();setSynopsis("mini_Text-Read.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">base-4.5.1.0: Basic libraries</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>non-portable (uses Text.ParserCombinators.ReadP)</td></tr><tr><th>Stability</th><td>provisional</td></tr><tr><th>Maintainer</th><td>libraries@haskell.org</td></tr><tr><th>Safe Haskell</th><td>Trustworthy</td></tr></table><p class="caption">Text.Read</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">The <code><a href="Text-Read.html#t:Read">Read</a></code> class </a></li><li><a href="#g:2">Haskell 98 functions </a></li><li><a href="#g:3">New parsing functions </a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Converting strings to values. </p><p>The <a href="Text-Read.html">Text.Read</a> library is the canonical library to import for <code><a href="Text-Read.html#t:Read">Read</a></code>-class facilities. For GHC only, it offers an extended and much improved <code><a href="Text-Read.html#t:Read">Read</a></code> class, which constitutes a proposed alternative to the Haskell 98 <code><a href="Text-Read.html#t:Read">Read</a></code>. In particular, writing parsers is easier, and the parsers are much more efficient. </p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span> <a href="#t:Read">Read</a> a <span class="keyword">where</span><ul class="subs"><li><a href="#v:readsPrec">readsPrec</a> :: <a href="Data-Int.html#t:Int">Int</a> -> <a href="Text-Read.html#t:ReadS">ReadS</a> a</li><li><a href="#v:readList">readList</a> :: <a href="Text-Read.html#t:ReadS">ReadS</a> [a]</li><li><a href="#v:readPrec">readPrec</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> a</li><li><a href="#v:readListPrec">readListPrec</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> [a]</li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:ReadS">ReadS</a> a = <a href="Data-String.html#t:String">String</a> -> [(a, <a href="Data-String.html#t:String">String</a>)]</li><li class="src short"><a href="#v:reads">reads</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:ReadS">ReadS</a> a</li><li class="src short"><a href="#v:read">read</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Data-String.html#t:String">String</a> -> a</li><li class="src short"><a href="#v:readParen">readParen</a> :: <a href="Data-Bool.html#t:Bool">Bool</a> -> <a href="Text-Read.html#t:ReadS">ReadS</a> a -> <a href="Text-Read.html#t:ReadS">ReadS</a> a</li><li class="src short"><a href="#v:lex">lex</a> :: <a href="Text-Read.html#t:ReadS">ReadS</a> <a href="Data-String.html#t:String">String</a></li><li class="src short">module <a href="Text-ParserCombinators-ReadPrec.html">Text.ParserCombinators.ReadPrec</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:Lexeme">Lexeme</a> <ul class="subs"><li>= <a href="#v:Char">Char</a> <a href="Data-Char.html#t:Char">Char</a> </li><li>| <a href="#v:String">String</a> <a href="Data-String.html#t:String">String</a> </li><li>| <a href="#v:Punc">Punc</a> <a href="Data-String.html#t:String">String</a> </li><li>| <a href="#v:Ident">Ident</a> <a href="Data-String.html#t:String">String</a> </li><li>| <a href="#v:Symbol">Symbol</a> <a href="Data-String.html#t:String">String</a> </li><li>| <a href="#v:Int">Int</a> <a href="Prelude.html#t:Integer">Integer</a> </li><li>| <a href="#v:Rat">Rat</a> <a href="Prelude.html#t:Rational">Rational</a> </li><li>| <a href="#v:EOF">EOF</a> </li></ul></li><li class="src short"><a href="#v:lexP">lexP</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> <a href="Text-Read.html#t:Lexeme">Lexeme</a></li><li class="src short"><a href="#v:parens">parens</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> a -> <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> a</li><li class="src short"><a href="#v:readListDefault">readListDefault</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:ReadS">ReadS</a> [a]</li><li class="src short"><a href="#v:readListPrecDefault">readListPrecDefault</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> [a]</li></ul></div><div id="interface"><h1 id="g:1">The <code><a href="Text-Read.html#t:Read">Read</a></code> class </h1><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:Read" class="def">Read</a> a <span class="keyword">where</span></p><div class="doc"><p>Parsing of <code><a href="Data-String.html#t:String">String</a></code>s, producing values. </p><p>Minimal complete definition: <code><a href="Text-Read.html#v:readsPrec">readsPrec</a></code> (or, for GHC only, <code><a href="Text-Read.html#v:readPrec">readPrec</a></code>) </p><p>Derived instances of <code><a href="Text-Read.html#t:Read">Read</a></code> make the following assumptions, which derived instances of <code><a href="Text-Show.html#t:Show">Show</a></code> obey: </p><ul><li> If the constructor is defined to be an infix operator, then the derived <code><a href="Text-Read.html#t:Read">Read</a></code> instance will parse only infix applications of the constructor (not the prefix form). </li><li> Associativity is not used to reduce the occurrence of parentheses, although precedence may be. </li><li> If the constructor is defined using record syntax, the derived <code><a href="Text-Read.html#t:Read">Read</a></code> will parse only the record-syntax form, and furthermore, the fields must be given in the same order as the original declaration. </li><li> The derived <code><a href="Text-Read.html#t:Read">Read</a></code> instance allows arbitrary Haskell whitespace between tokens of the input string. Extra parentheses are also allowed. </li></ul><p>For example, given the declarations </p><pre> infixr 5 :^: data Tree a = Leaf a | Tree a :^: Tree a </pre><p>the derived instance of <code><a href="Text-Read.html#t:Read">Read</a></code> in Haskell 98 is equivalent to </p><pre> instance (Read a) => Read (Tree a) where readsPrec d r = readParen (d > app_prec) (\r -> [(Leaf m,t) | ("Leaf",s) <- lex r, (m,t) <- readsPrec (app_prec+1) s]) r ++ readParen (d > up_prec) (\r -> [(u:^:v,w) | (u,s) <- readsPrec (up_prec+1) r, (":^:",t) <- lex s, (v,w) <- readsPrec (up_prec+1) t]) r where app_prec = 10 up_prec = 5 </pre><p>Note that right-associativity of <code>:^:</code> is unused. </p><p>The derived instance in GHC is equivalent to </p><pre> instance (Read a) => Read (Tree a) where readPrec = parens $ (prec app_prec $ do Ident "Leaf" <- lexP m <- step readPrec return (Leaf m)) +++ (prec up_prec $ do u <- step readPrec Symbol ":^:" <- lexP v <- step readPrec return (u :^: v)) where app_prec = 10 up_prec = 5 readListPrec = readListPrecDefault </pre></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:readsPrec" class="def">readsPrec</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Data-Int.html#t:Int">Int</a></td><td class="doc"><p>the operator precedence of the enclosing context (a number from <code>0</code> to <code>11</code>). Function application has precedence <code>10</code>. </p></td></tr><tr><td class="src">-> <a href="Text-Read.html#t:ReadS">ReadS</a> a</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>attempts to parse a value from the front of the string, returning a list of (parsed value, remaining string) pairs. If there is no successful parse, the returned list is empty. </p><p>Derived instances of <code><a href="Text-Read.html#t:Read">Read</a></code> and <code><a href="Text-Show.html#t:Show">Show</a></code> satisfy the following: </p><ul><li> <code>(x,"")</code> is an element of <code>(<code><a href="Text-Read.html#v:readsPrec">readsPrec</a></code> d (<code><a href="Text-Show.html#v:showsPrec">showsPrec</a></code> d x ""))</code>. </li></ul><p>That is, <code><a href="Text-Read.html#v:readsPrec">readsPrec</a></code> parses the string produced by <code><a href="Text-Show.html#v:showsPrec">showsPrec</a></code>, and delivers the value that <code><a href="Text-Show.html#v:showsPrec">showsPrec</a></code> started with. </p></div><p class="src"><a name="v:readList" class="def">readList</a> :: <a href="Text-Read.html#t:ReadS">ReadS</a> [a]</p><div class="doc"><p>The method <code><a href="Text-Read.html#v:readList">readList</a></code> is provided to allow the programmer to give a specialised way of parsing lists of values. For example, this is used by the predefined <code><a href="Text-Read.html#t:Read">Read</a></code> instance of the <code><a href="Data-Char.html#t:Char">Char</a></code> type, where values of type <code><a href="Data-String.html#t:String">String</a></code> should be are expected to use double quotes, rather than square brackets. </p></div><p class="src"><a name="v:readPrec" class="def">readPrec</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> a</p><div class="doc"><p>Proposed replacement for <code><a href="Text-Read.html#v:readsPrec">readsPrec</a></code> using new-style parsers (GHC only). </p></div><p class="src"><a name="v:readListPrec" class="def">readListPrec</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> [a]</p><div class="doc"><p>Proposed replacement for <code><a href="Text-Read.html#v:readList">readList</a></code> using new-style parsers (GHC only). The default definition uses <code><a href="Text-Read.html#v:readList">readList</a></code>. Instances that define <code><a href="Text-Read.html#v:readPrec">readPrec</a></code> should also define <code><a href="Text-Read.html#v:readListPrec">readListPrec</a></code> as <code><a href="Text-Read.html#v:readListPrecDefault">readListPrecDefault</a></code>. </p></div></div><div class="subs instances"><p id="control.i:Read" class="caption collapser" onclick="toggleSection('i:Read')">Instances</p><div id="section.i:Read" class="show"><table><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Bool.html#t:Bool">Bool</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Char.html#t:Char">Char</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Prelude.html#t:Double">Double</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Prelude.html#t:Float">Float</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Int.html#t:Int">Int</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Int.html#t:Int8">Int8</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Int.html#t:Int16">Int16</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Int.html#t:Int32">Int32</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Int.html#t:Int64">Int64</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Prelude.html#t:Integer">Integer</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Ord.html#t:Ordering">Ordering</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Word.html#t:Word">Word</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Word.html#t:Word8">Word8</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Word.html#t:Word16">Word16</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Word.html#t:Word32">Word32</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Word.html#t:Word64">Word64</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> ()</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="../ghc-prim-0.2.0.0/GHC-Generics.html#t:Arity">Arity</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="../ghc-prim-0.2.0.0/GHC-Generics.html#t:Fixity">Fixity</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="../ghc-prim-0.2.0.0/GHC-Generics.html#t:Associativity">Associativity</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Text-Read.html#t:Lexeme">Lexeme</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-IO.html#t:IOMode">IOMode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="GHC-IO-Device.html#t:SeekMode">SeekMode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CUIntMax">CUIntMax</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CIntMax">CIntMax</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CUIntPtr">CUIntPtr</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CIntPtr">CIntPtr</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CSUSeconds">CSUSeconds</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CUSeconds">CUSeconds</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CTime">CTime</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CClock">CClock</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CSigAtomic">CSigAtomic</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CWchar">CWchar</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CSize">CSize</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CPtrdiff">CPtrdiff</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CDouble">CDouble</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CFloat">CFloat</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CULLong">CULLong</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CLLong">CLLong</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CULong">CULong</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CLong">CLong</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CUInt">CUInt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CInt">CInt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CUShort">CUShort</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CShort">CShort</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CUChar">CUChar</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CSChar">CSChar</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-C-Types.html#t:CChar">CChar</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Char.html#t:GeneralCategory">GeneralCategory</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-Ptr.html#t:IntPtr">IntPtr</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Foreign-Ptr.html#t:WordPtr">WordPtr</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="GHC-IO-Handle.html#t:NewlineMode">NewlineMode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="GHC-IO-Handle.html#t:Newline">Newline</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="GHC-IO-Handle.html#t:BufferMode">BufferMode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Exit.html#t:ExitCode">ExitCode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:Fd">Fd</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CRLim">CRLim</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CTcflag">CTcflag</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CSpeed">CSpeed</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CCc">CCc</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CUid">CUid</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CNlink">CNlink</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CGid">CGid</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CSsize">CSsize</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CPid">CPid</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:COff">COff</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CMode">CMode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CIno">CIno</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="System-Posix-Types.html#t:CDev">CDev</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="GHC-Stats.html#t:GCStats">GCStats</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Version.html#t:Version">Version</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> [a]</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Prelude.html#t:Integral">Integral</a> a, <a href="Text-Read.html#t:Read">Read</a> a) => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Ratio.html#t:Ratio">Ratio</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Maybe.html#t:Maybe">Maybe</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Complex.html#t:Complex">Complex</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Fixed.html#t:HasResolution">HasResolution</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Fixed.html#t:Fixed">Fixed</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b) => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Either.html#t:Either">Either</a> a b)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b) => <a href="Text-Read.html#t:Read">Read</a> (a, b)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Data-Ix.html#t:Ix">Ix</a> a, <a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b) => <a href="Text-Read.html#t:Read">Read</a> (Array a b)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i, <a href="Text-Read.html#t:Read">Read</a> j) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i, j)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i, <a href="Text-Read.html#t:Read">Read</a> j, <a href="Text-Read.html#t:Read">Read</a> k) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i, j, k)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i, <a href="Text-Read.html#t:Read">Read</a> j, <a href="Text-Read.html#t:Read">Read</a> k, <a href="Text-Read.html#t:Read">Read</a> l) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i, j, k, l)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i, <a href="Text-Read.html#t:Read">Read</a> j, <a href="Text-Read.html#t:Read">Read</a> k, <a href="Text-Read.html#t:Read">Read</a> l, <a href="Text-Read.html#t:Read">Read</a> m) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i, j, k, l, m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i, <a href="Text-Read.html#t:Read">Read</a> j, <a href="Text-Read.html#t:Read">Read</a> k, <a href="Text-Read.html#t:Read">Read</a> l, <a href="Text-Read.html#t:Read">Read</a> m, <a href="Text-Read.html#t:Read">Read</a> n) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i, j, k, l, m, n)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Text-Read.html#t:Read">Read</a> a, <a href="Text-Read.html#t:Read">Read</a> b, <a href="Text-Read.html#t:Read">Read</a> c, <a href="Text-Read.html#t:Read">Read</a> d, <a href="Text-Read.html#t:Read">Read</a> e, <a href="Text-Read.html#t:Read">Read</a> f, <a href="Text-Read.html#t:Read">Read</a> g, <a href="Text-Read.html#t:Read">Read</a> h, <a href="Text-Read.html#t:Read">Read</a> i, <a href="Text-Read.html#t:Read">Read</a> j, <a href="Text-Read.html#t:Read">Read</a> k, <a href="Text-Read.html#t:Read">Read</a> l, <a href="Text-Read.html#t:Read">Read</a> m, <a href="Text-Read.html#t:Read">Read</a> n, <a href="Text-Read.html#t:Read">Read</a> o) => <a href="Text-Read.html#t:Read">Read</a> (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:ReadS" class="def">ReadS</a> a = <a href="Data-String.html#t:String">String</a> -> [(a, <a href="Data-String.html#t:String">String</a>)]</p><div class="doc"><p>A parser for a type <code>a</code>, represented as a function that takes a <code><a href="Data-String.html#t:String">String</a></code> and returns a list of possible parses as <code>(a,<code><a href="Data-String.html#t:String">String</a></code>)</code> pairs. </p><p>Note that this kind of backtracking parser is very inefficient; reading a large structure may be quite slow (cf <code><a href="Text-ParserCombinators-ReadP.html#t:ReadP">ReadP</a></code>). </p></div></div><h1 id="g:2">Haskell 98 functions </h1><div class="top"><p class="src"><a name="v:reads" class="def">reads</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:ReadS">ReadS</a> a</p><div class="doc"><p>equivalent to <code><a href="Text-Read.html#v:readsPrec">readsPrec</a></code> with a precedence of 0. </p></div></div><div class="top"><p class="src"><a name="v:read" class="def">read</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Data-String.html#t:String">String</a> -> a</p><div class="doc"><p>The <code><a href="Text-Read.html#v:read">read</a></code> function reads input from a string, which must be completely consumed by the input process. </p></div></div><div class="top"><p class="src"><a name="v:readParen" class="def">readParen</a> :: <a href="Data-Bool.html#t:Bool">Bool</a> -> <a href="Text-Read.html#t:ReadS">ReadS</a> a -> <a href="Text-Read.html#t:ReadS">ReadS</a> a</p><div class="doc"><p><code><code><a href="Text-Read.html#v:readParen">readParen</a></code> <code><a href="Data-Bool.html#v:True">True</a></code> p</code> parses what <code>p</code> parses, but surrounded with parentheses. </p><p><code><code><a href="Text-Read.html#v:readParen">readParen</a></code> <code><a href="Data-Bool.html#v:False">False</a></code> p</code> parses what <code>p</code> parses, but optionally surrounded with parentheses. </p></div></div><div class="top"><p class="src"><a name="v:lex" class="def">lex</a> :: <a href="Text-Read.html#t:ReadS">ReadS</a> <a href="Data-String.html#t:String">String</a></p><div class="doc"><p>The <code><a href="Text-Read.html#v:lex">lex</a></code> function reads a single lexeme from the input, discarding initial white space, and returning the characters that constitute the lexeme. If the input string contains only white space, <code><a href="Text-Read.html#v:lex">lex</a></code> returns a single successful `lexeme' consisting of the empty string. (Thus <code><code><a href="Text-Read.html#v:lex">lex</a></code> "" = [("","")]</code>.) If there is no legal lexeme at the beginning of the input string, <code><a href="Text-Read.html#v:lex">lex</a></code> fails (i.e. returns <code>[]</code>). </p><p>This lexer is not completely faithful to the Haskell lexical syntax in the following respects: </p><ul><li> Qualified names are not handled properly </li><li> Octal and hexadecimal numerics are not recognized as a single token </li><li> Comments are not treated properly </li></ul></div></div><h1 id="g:3">New parsing functions </h1><div class="top"><p class="src">module <a href="Text-ParserCombinators-ReadPrec.html">Text.ParserCombinators.ReadPrec</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Lexeme" class="def">Lexeme</a> </p><div class="doc"><p>Haskell lexemes. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Char" class="def">Char</a> <a href="Data-Char.html#t:Char">Char</a></td><td class="doc"><p>Character literal </p></td></tr><tr><td class="src"><a name="v:String" class="def">String</a> <a href="Data-String.html#t:String">String</a></td><td class="doc"><p>String literal, with escapes interpreted </p></td></tr><tr><td class="src"><a name="v:Punc" class="def">Punc</a> <a href="Data-String.html#t:String">String</a></td><td class="doc"><p>Punctuation or reserved symbol, e.g. <code>(</code>, <code>::</code> </p></td></tr><tr><td class="src"><a name="v:Ident" class="def">Ident</a> <a href="Data-String.html#t:String">String</a></td><td class="doc"><p>Haskell identifier, e.g. <code>foo</code>, <code>Baz</code> </p></td></tr><tr><td class="src"><a name="v:Symbol" class="def">Symbol</a> <a href="Data-String.html#t:String">String</a></td><td class="doc"><p>Haskell symbol, e.g. <code>>></code>, <code>:%</code> </p></td></tr><tr><td class="src"><a name="v:Int" class="def">Int</a> <a href="Prelude.html#t:Integer">Integer</a></td><td class="doc"><p>Integer literal </p></td></tr><tr><td class="src"><a name="v:Rat" class="def">Rat</a> <a href="Prelude.html#t:Rational">Rational</a></td><td class="doc"><p>Floating point literal </p></td></tr><tr><td class="src"><a name="v:EOF" class="def">EOF</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:Lexeme" class="caption collapser" onclick="toggleSection('i:Lexeme')">Instances</p><div id="section.i:Lexeme" class="show"><table><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> <a href="Text-Read.html#t:Lexeme">Lexeme</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Text-Read.html#t:Lexeme">Lexeme</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> <a href="Text-Read.html#t:Lexeme">Lexeme</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:lexP" class="def">lexP</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> <a href="Text-Read.html#t:Lexeme">Lexeme</a></p><div class="doc"><p>Parse a single lexeme </p></div></div><div class="top"><p class="src"><a name="v:parens" class="def">parens</a> :: <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> a -> <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> a</p><div class="doc"><p><code>(parens p)</code> parses "P", "(P0)", "((P0))", etc, where <code>p</code> parses "P" in the current precedence context and parses "P0" in precedence context zero </p></div></div><div class="top"><p class="src"><a name="v:readListDefault" class="def">readListDefault</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:ReadS">ReadS</a> [a]</p><div class="doc"><p>A possible replacement definition for the <code><a href="Text-Read.html#v:readList">readList</a></code> method (GHC only). This is only needed for GHC, and even then only for <code><a href="Text-Read.html#t:Read">Read</a></code> instances where <code><a href="Text-Read.html#v:readListPrec">readListPrec</a></code> isn't defined as <code><a href="Text-Read.html#v:readListPrecDefault">readListPrecDefault</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:readListPrecDefault" class="def">readListPrecDefault</a> :: <a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> [a]</p><div class="doc"><p>A possible replacement definition for the <code><a href="Text-Read.html#v:readListPrec">readListPrec</a></code> method, defined using <code><a href="Text-Read.html#v:readPrec">readPrec</a></code> (GHC only). </p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>