Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 8d1ef08c9e0d44c69764afc615a03d0d > files > 1742

ghc-ghc-devel-6.12.3-5.fc14.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>hsSyn/HsLit.lhs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
%
% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
\section[HsLit]{Abstract syntax: source-language literals}

\begin{code}
<pre><a name="line-1"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>HsLit</span> <span class='hs-keyword'>where</span>
<a name="line-2"></a>
<a name="line-3"></a><span class='hs-cpp'>#include "HsVersions.h"</span>
<a name="line-4"></a>
<a name="line-5"></a><span class='hs-keyword'>import</span> <span class='hs-comment'>{-# SOURCE #-}</span> <span class='hs-conid'>HsExpr</span><span class='hs-layout'>(</span> <span class='hs-conid'>SyntaxExpr</span><span class='hs-layout'>,</span> <span class='hs-varid'>pprExpr</span> <span class='hs-layout'>)</span>
<a name="line-6"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>HsTypes</span> <span class='hs-layout'>(</span><span class='hs-conid'>PostTcType</span><span class='hs-layout'>)</span>
<a name="line-7"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Type</span>	<span class='hs-layout'>(</span> <span class='hs-conid'>Type</span> <span class='hs-layout'>)</span>
<a name="line-8"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Outputable</span>
<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>FastString</span>
</pre>\end{code}


%************************************************************************
%*									*
\subsection[HsLit]{Literals}
%*									*
%************************************************************************


\begin{code}
<pre><a name="line-1"></a><a name="HsLit"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>HsLit</span>
<a name="line-2"></a>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HsChar</span>	    <span class='hs-conid'>Char</span>		<span class='hs-comment'>-- Character</span>
<a name="line-3"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsCharPrim</span>	    <span class='hs-conid'>Char</span>		<span class='hs-comment'>-- Unboxed character</span>
<a name="line-4"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsString</span>	    <span class='hs-conid'>FastString</span>		<span class='hs-comment'>-- String</span>
<a name="line-5"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsStringPrim</span>    <span class='hs-conid'>FastString</span>		<span class='hs-comment'>-- Packed string</span>
<a name="line-6"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsInt</span>	    <span class='hs-conid'>Integer</span>		<span class='hs-comment'>-- Genuinely an Int; arises from TcGenDeriv, </span>
<a name="line-7"></a>					<span class='hs-comment'>--	and from TRANSLATION</span>
<a name="line-8"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsIntPrim</span>	    <span class='hs-conid'>Integer</span>		<span class='hs-comment'>-- Unboxed Int</span>
<a name="line-9"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsWordPrim</span>	    <span class='hs-conid'>Integer</span>		<span class='hs-comment'>-- Unboxed Word</span>
<a name="line-10"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsInteger</span>	    <span class='hs-conid'>Integer</span>  <span class='hs-conid'>Type</span>	<span class='hs-comment'>-- Genuinely an integer; arises only from TRANSLATION</span>
<a name="line-11"></a>					<span class='hs-comment'>-- 	(overloaded literals are done with HsOverLit)</span>
<a name="line-12"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsRat</span>	    <span class='hs-conid'>Rational</span> <span class='hs-conid'>Type</span>	<span class='hs-comment'>-- Genuinely a rational; arises only from TRANSLATION</span>
<a name="line-13"></a>					<span class='hs-comment'>-- 	(overloaded literals are done with HsOverLit)</span>
<a name="line-14"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsFloatPrim</span>	    <span class='hs-conid'>Rational</span>		<span class='hs-comment'>-- Unboxed Float</span>
<a name="line-15"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsDoublePrim</span>    <span class='hs-conid'>Rational</span>		<span class='hs-comment'>-- Unboxed Double</span>
<a name="line-16"></a>
<a name="line-17"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>HsLit</span> <span class='hs-keyword'>where</span>
<a name="line-18"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsChar</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>	    <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsChar</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-19"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsCharPrim</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>   <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsCharPrim</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-20"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsString</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>     <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsString</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-21"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsStringPrim</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsStringPrim</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-22"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsInt</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>	    <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsInt</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-23"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsIntPrim</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>    <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntPrim</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-24"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsWordPrim</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>   <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsWordPrim</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-25"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsInteger</span> <span class='hs-varid'>x1</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsInteger</span> <span class='hs-varid'>x2</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-26"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsRat</span> <span class='hs-varid'>x1</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>	    <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsRat</span> <span class='hs-varid'>x2</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-27"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsFloatPrim</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span>  <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFloatPrim</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-28"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsDoublePrim</span> <span class='hs-varid'>x1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsDoublePrim</span> <span class='hs-varid'>x2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x1</span><span class='hs-varop'>==</span><span class='hs-varid'>x2</span>
<a name="line-29"></a>  <span class='hs-keyword'>_</span>                 <span class='hs-varop'>==</span> <span class='hs-keyword'>_</span>                 <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-30"></a>
<a name="line-31"></a><a name="HsOverLit"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>HsOverLit</span> <span class='hs-varid'>id</span> 	<span class='hs-comment'>-- An overloaded literal</span>
<a name="line-32"></a>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>OverLit</span> <span class='hs-layout'>{</span>
<a name="line-33"></a>	<span class='hs-varid'>ol_val</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>OverLitVal</span><span class='hs-layout'>,</span> 
<a name="line-34"></a>	<span class='hs-varid'>ol_rebindable</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>,</span>		<span class='hs-comment'>-- True &lt;=&gt; rebindable syntax</span>
<a name="line-35"></a>					<span class='hs-comment'>-- False &lt;=&gt; standard syntax</span>
<a name="line-36"></a>	<span class='hs-varid'>ol_witness</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SyntaxExpr</span> <span class='hs-varid'>id</span><span class='hs-layout'>,</span>	<span class='hs-comment'>-- Note [Overloaded literal witnesses]</span>
<a name="line-37"></a>	<span class='hs-varid'>ol_type</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PostTcType</span> <span class='hs-layout'>}</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="OverLitVal"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>OverLitVal</span>
<a name="line-40"></a>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HsIntegral</span>   <span class='hs-varop'>!</span><span class='hs-conid'>Integer</span>   	<span class='hs-comment'>-- Integer-looking literals;</span>
<a name="line-41"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsFractional</span> <span class='hs-varop'>!</span><span class='hs-conid'>Rational</span>   	<span class='hs-comment'>-- Frac-looking literals</span>
<a name="line-42"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsIsString</span>   <span class='hs-varop'>!</span><span class='hs-conid'>FastString</span> 	<span class='hs-comment'>-- String-looking literals</span>
<a name="line-43"></a>
<a name="line-44"></a><a name="overLitType"></a><span class='hs-definition'>overLitType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>HsOverLit</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span>
<a name="line-45"></a><span class='hs-definition'>overLitType</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ol_type</span>
</pre>\end{code}

Note [Overloaded literal witnesses]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Before* type checking, the SyntaxExpr in an HsOverLit is the
name of the coercion function, 'fromInteger' or 'fromRational'.
*After* type checking, it is a witness for the literal, such as
	(fromInteger 3) or lit_78
This witness should replace the literal.

This dual role is unusual, because we're replacing 'fromInteger' with 
a call to fromInteger.  Reason: it allows commoning up of the fromInteger
calls, which wouldn't be possible if the desguarar made the application

The PostTcType in each branch records the type the overload literal is
found to have.

\begin{code}
<pre><a name="line-1"></a><span class='hs-comment'>-- Comparison operations are needed when grouping literals</span>
<a name="line-2"></a><span class='hs-comment'>-- for compiling pattern-matching (module MatchLit)</span>
<a name="line-3"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsOverLit</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-4"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>OverLit</span> <span class='hs-layout'>{</span><span class='hs-varid'>ol_val</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>val1</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>OverLit</span> <span class='hs-layout'>{</span><span class='hs-varid'>ol_val</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>val2</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>val1</span> <span class='hs-varop'>==</span> <span class='hs-varid'>val2</span>
<a name="line-5"></a>
<a name="line-6"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>OverLitVal</span> <span class='hs-keyword'>where</span>
<a name="line-7"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-varid'>i1</span><span class='hs-layout'>)</span>   <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-varid'>i2</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>i1</span> <span class='hs-varop'>==</span> <span class='hs-varid'>i2</span>
<a name="line-8"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-varid'>f1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-varid'>f2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f1</span> <span class='hs-varop'>==</span> <span class='hs-varid'>f2</span>
<a name="line-9"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-varid'>s1</span><span class='hs-layout'>)</span>   <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-varid'>s2</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s1</span> <span class='hs-varop'>==</span> <span class='hs-varid'>s2</span>
<a name="line-10"></a>  <span class='hs-keyword'>_</span>                 <span class='hs-varop'>==</span> <span class='hs-keyword'>_</span>                 <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-11"></a>
<a name="line-12"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Ord</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsOverLit</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-13"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>OverLit</span> <span class='hs-layout'>{</span><span class='hs-varid'>ol_val</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>val1</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>OverLit</span> <span class='hs-layout'>{</span><span class='hs-varid'>ol_val</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>val2</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>val1</span> <span class='hs-varop'>`compare`</span> <span class='hs-varid'>val2</span>
<a name="line-14"></a>
<a name="line-15"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Ord</span> <span class='hs-conid'>OverLitVal</span> <span class='hs-keyword'>where</span>
<a name="line-16"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-varid'>i1</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-varid'>i2</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>i1</span> <span class='hs-varop'>`compare`</span> <span class='hs-varid'>i2</span>
<a name="line-17"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LT</span>
<a name="line-18"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LT</span>
<a name="line-19"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-varid'>f1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-varid'>f2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f1</span> <span class='hs-varop'>`compare`</span> <span class='hs-varid'>f2</span>
<a name="line-20"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GT</span>
<a name="line-21"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LT</span>
<a name="line-22"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-varid'>s1</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-varid'>s2</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s1</span> <span class='hs-varop'>`compare`</span> <span class='hs-varid'>s2</span>
<a name="line-23"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GT</span>
<a name="line-24"></a>  <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GT</span>
</pre>\end{code}

\begin{code}
<pre><a name="line-1"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Outputable</span> <span class='hs-conid'>HsLit</span> <span class='hs-keyword'>where</span>
<a name="line-2"></a>	<span class='hs-comment'>-- Use "show" because it puts in appropriate escapes</span>
<a name="line-3"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsChar</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pprHsChar</span> <span class='hs-varid'>c</span>
<a name="line-4"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsCharPrim</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pprHsChar</span> <span class='hs-varid'>c</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>char</span> <span class='hs-chr'>'#'</span>
<a name="line-5"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pprHsString</span> <span class='hs-varid'>s</span>
<a name="line-6"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsStringPrim</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pprHsString</span> <span class='hs-varid'>s</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>char</span> <span class='hs-chr'>'#'</span>
<a name="line-7"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsInt</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>integer</span> <span class='hs-varid'>i</span>
<a name="line-8"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsInteger</span> <span class='hs-varid'>i</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>integer</span> <span class='hs-varid'>i</span>
<a name="line-9"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsRat</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>rational</span> <span class='hs-varid'>f</span>
<a name="line-10"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFloatPrim</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>rational</span> <span class='hs-varid'>f</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>char</span> <span class='hs-chr'>'#'</span>
<a name="line-11"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsDoublePrim</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>rational</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>text</span> <span class='hs-str'>"##"</span>
<a name="line-12"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntPrim</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>integer</span> <span class='hs-varid'>i</span>  <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>char</span> <span class='hs-chr'>'#'</span>
<a name="line-13"></a>    <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsWordPrim</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span>	 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>integer</span> <span class='hs-varid'>w</span>  <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>text</span> <span class='hs-str'>"##"</span>
<a name="line-14"></a>
<a name="line-15"></a><span class='hs-comment'>-- in debug mode, print the expression that it's resolved to, too</span>
<a name="line-16"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>OutputableBndr</span> <span class='hs-varid'>id</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Outputable</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsOverLit</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-17"></a>  <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>OverLit</span> <span class='hs-layout'>{</span><span class='hs-varid'>ol_val</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>val</span><span class='hs-layout'>,</span> <span class='hs-varid'>ol_witness</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>witness</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> 
<a name="line-18"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>ppr</span> <span class='hs-varid'>val</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>ifPprDebug</span> <span class='hs-layout'>(</span><span class='hs-varid'>parens</span> <span class='hs-layout'>(</span><span class='hs-varid'>pprExpr</span> <span class='hs-varid'>witness</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-19"></a>
<a name="line-20"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Outputable</span> <span class='hs-conid'>OverLitVal</span> <span class='hs-keyword'>where</span>
<a name="line-21"></a>  <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIntegral</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>integer</span> <span class='hs-varid'>i</span> 
<a name="line-22"></a>  <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsFractional</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>rational</span> <span class='hs-varid'>f</span>
<a name="line-23"></a>  <span class='hs-varid'>ppr</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsIsString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pprHsString</span> <span class='hs-varid'>s</span>
</pre>\end{code}
</body>
</html>