hxt-8.0.0: doc/hdoc/src/Control-Strategies-DeepSeq.html
<!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>Haskell Code by HsColour</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='comment'>{- |
<a name="line-2"></a>
<a name="line-3"></a>stolen from comp.lang.functional from Dean Herington
<a name="line-4"></a>
<a name="line-5"></a>DeepSeq.lhs -- deep strict evaluation support
<a name="line-6"></a>
<a name="line-7"></a>The `DeepSeq` class provides a method `deepSeq` that is similar to
<a name="line-8"></a>`seq` except that it forces deep evaluation of its first argument
<a name="line-9"></a>before returning its second argument.
<a name="line-10"></a>
<a name="line-11"></a>Instances of `DeepSeq` are provided for Prelude types. Other
<a name="line-12"></a>instances must be supplied by users of this module.
<a name="line-13"></a>
<a name="line-14"></a>$Id: DeepSeq.lhs,v 1.5 2002/04/01 20:58:24 heringto Exp $
<a name="line-15"></a>-}</span>
<a name="line-16"></a>
<a name="line-17"></a><span class='keyword'>module</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Strategies</span><span class='varop'>.</span><span class='conid'>DeepSeq</span>
<a name="line-18"></a><span class='keyword'>where</span>
<a name="line-19"></a>
<a name="line-20"></a><a name="DeepSeq"></a><span class='keyword'>class</span> <span class='conid'>DeepSeq</span> <span class='varid'>a</span> <span class='keyword'>where</span>
<a name="line-21"></a> <span class='varid'>deepSeq</span> <span class='keyglyph'>::</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>b</span>
<a name="line-22"></a> <span class='varid'>deepSeq</span> <span class='keyglyph'>=</span> <span class='varid'>seq</span>
<a name="line-23"></a>
<a name="line-24"></a><span class='keyword'>infixr</span> <span class='num'>0</span> <span class='varop'>`deepSeq`</span><span class='layout'>,</span> <span class='varop'>$!!</span>
<a name="line-25"></a>
<a name="line-26"></a><a name="$!!"></a><span class='layout'>(</span><span class='varop'>$!!</span><span class='layout'>)</span> <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='varid'>b</span>
<a name="line-27"></a>
<a name="line-28"></a><a name="f"></a><span class='definition'>f</span> <span class='varop'>$!!</span> <span class='varid'>x</span> <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='varop'>`deepSeq`</span> <span class='varid'>f</span> <span class='varid'>x</span>
<a name="line-29"></a>
<a name="line-30"></a><a name="strict"></a><span class='definition'>strict</span> <span class='keyglyph'>::</span> <span class='conid'>DeepSeq</span> <span class='varid'>a</span> <span class='keyglyph'>=></span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='varid'>a</span>
<a name="line-31"></a><span class='definition'>strict</span> <span class='varid'>x</span>
<a name="line-32"></a> <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='varop'>`deepSeq`</span> <span class='varid'>x</span>
<a name="line-33"></a>
<a name="line-34"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>()</span>
<a name="line-35"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Bool</span>
<a name="line-36"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Char</span>
<a name="line-37"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Ordering</span>
<a name="line-38"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Int</span>
<a name="line-39"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Integer</span>
<a name="line-40"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Float</span>
<a name="line-41"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>Double</span>
<a name="line-42"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='varid'>b</span><span class='layout'>)</span>
<a name="line-43"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='conid'>IO</span> <span class='varid'>a</span><span class='layout'>)</span>
<a name="line-44"></a>
<a name="line-45"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-46"></a> <span class='varid'>deepSeq</span> <span class='conid'>Nothing</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>y</span>
<a name="line-47"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>x</span> <span class='varid'>y</span>
<a name="line-48"></a>
<a name="line-49"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='conid'>Either</span> <span class='varid'>a</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-50"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>Left</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varid'>y</span>
<a name="line-51"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>Right</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varid'>y</span>
<a name="line-52"></a>
<a name="line-53"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyword'>where</span>
<a name="line-54"></a> <span class='varid'>deepSeq</span> <span class='conid'>[]</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>y</span>
<a name="line-55"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>x</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>x</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>xs</span> <span class='varid'>y</span>
<a name="line-56"></a>
<a name="line-57"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-58"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varid'>y</span>
<a name="line-59"></a>
<a name="line-60"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-61"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>c</span> <span class='varid'>y</span>
<a name="line-62"></a>
<a name="line-63"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>c</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>d</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-64"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>c</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>d</span> <span class='varid'>y</span>
<a name="line-65"></a>
<a name="line-66"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>c</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>d</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-67"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>c</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>d</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>e</span> <span class='varid'>y</span>
<a name="line-68"></a>
<a name="line-69"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>c</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>d</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>e</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>,</span><span class='varid'>f</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-70"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>,</span><span class='varid'>f</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>c</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>d</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>e</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>f</span> <span class='varid'>y</span>
<a name="line-71"></a>
<a name="line-72"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>a</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>b</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>c</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>d</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>e</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>f</span><span class='layout'>,</span><span class='conid'>DeepSeq</span> <span class='varid'>g</span><span class='layout'>)</span> <span class='keyglyph'>=></span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>,</span><span class='varid'>f</span><span class='layout'>,</span><span class='varid'>g</span><span class='layout'>)</span> <span class='keyword'>where</span>
<a name="line-73"></a> <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span><span class='varid'>b</span><span class='layout'>,</span><span class='varid'>c</span><span class='layout'>,</span><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>,</span><span class='varid'>f</span><span class='layout'>,</span><span class='varid'>g</span><span class='layout'>)</span> <span class='varid'>y</span> <span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>b</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>c</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>d</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>e</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>f</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>g</span> <span class='varid'>y</span>
</pre></body>
</html>