/usr/share/doc/libghc-curry-frontend-doc/html/src/IL-Type.html is in libghc-curry-frontend-doc 1.0.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | <?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://code.haskell.org/~malcolm/hscolour/ -->
<title>src/IL/Type.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{- |
<a name="line-2"></a> Module : $Header$
<a name="line-3"></a> Description : Definition of the intermediate language (IL)
<a name="line-4"></a> Copyright : (c) 1999 - 2003 Wolfgang Lux
<a name="line-5"></a> Martin Engelke
<a name="line-6"></a> 2016 - 2017 Finn Teegen
<a name="line-7"></a> License : BSD-3-clause
<a name="line-8"></a>
<a name="line-9"></a> Maintainer : bjp@informatik.uni-kiel.de
<a name="line-10"></a> Stability : experimental
<a name="line-11"></a> Portability : portable
<a name="line-12"></a>
<a name="line-13"></a> The module 'IL' defines the intermediate language which will be
<a name="line-14"></a> compiled into abstract machine code. The intermediate language removes
<a name="line-15"></a> a lot of syntactic sugar from the Curry source language. Top-level
<a name="line-16"></a> declarations are restricted to data type and function definitions. A
<a name="line-17"></a> newtype definition serves mainly as a hint to the backend that it must
<a name="line-18"></a> provide an auxiliary function for partial applications of the
<a name="line-19"></a> constructor (Newtype constructors must not occur in patterns
<a name="line-20"></a> and may be used in expressions only as partial applications.).
<a name="line-21"></a>
<a name="line-22"></a> Type declarations use a de-Bruijn indexing scheme (starting at 0) for
<a name="line-23"></a> type variables. In the type of a function, all type variables are
<a name="line-24"></a> numbered in the order of their occurence from left to right, i.e., a
<a name="line-25"></a> type '(Int -> b) -> (a,b) -> c -> (a,c)' is translated into the
<a name="line-26"></a> type (using integer numbers to denote the type variables)
<a name="line-27"></a> '(Int -> 0) -> (1,0) -> 2 -> (1,2)'.
<a name="line-28"></a>
<a name="line-29"></a> Pattern matching in an equation is handled via flexible and rigid
<a name="line-30"></a> 'Case' expressions. Overlapping rules are translated with the
<a name="line-31"></a> help of 'Or' expressions. The intermediate language has three
<a name="line-32"></a> kinds of binding expressions, 'Exist' expressions introduce a
<a name="line-33"></a> new logical variable, 'Let' expression support a single
<a name="line-34"></a> non-recursive variable binding, and 'Letrec' expressions
<a name="line-35"></a> introduce multiple variables with recursive initializer expressions.
<a name="line-36"></a> The intermediate language explicitly distinguishes (local) variables
<a name="line-37"></a> and (global) functions in expressions.
<a name="line-38"></a>
<a name="line-39"></a> Note: this modified version uses haskell type 'Integer'
<a name="line-40"></a> instead of 'Int' for representing integer values. This provides
<a name="line-41"></a> an unlimited range of integer constants in Curry programs.
<a name="line-42"></a>-}</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>IL</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span>
<a name="line-45"></a> <span class='hs-layout'>(</span> <span class='hs-comment'>-- * Data types</span>
<a name="line-46"></a> <span class='hs-conid'>Module</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Decl</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>ConstrDecl</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Literal</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-47"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ConstrTerm</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Expression</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eval</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Binding</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-48"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-49"></a>
<a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Curry</span><span class='hs-varop'>.</span><span class='hs-conid'>Base</span><span class='hs-varop'>.</span><span class='hs-conid'>Ident</span>
<a name="line-51"></a>
<a name="line-52"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Base</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="Module"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Module</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Module</span> <span class='hs-conid'>ModuleIdent</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ModuleIdent</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Decl</span><span class='hs-keyglyph'>]</span>
<a name="line-55"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-56"></a>
<a name="line-57"></a><a name="Decl"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Decl</span>
<a name="line-58"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>DataDecl</span> <span class='hs-conid'>QualIdent</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ConstrDecl</span><span class='hs-keyglyph'>]</span>
<a name="line-59"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExternalDataDecl</span> <span class='hs-conid'>QualIdent</span> <span class='hs-conid'>Int</span>
<a name="line-60"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FunctionDecl</span> <span class='hs-conid'>QualIdent</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ident</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Expression</span>
<a name="line-61"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExternalDecl</span> <span class='hs-conid'>QualIdent</span> <span class='hs-conid'>Type</span>
<a name="line-62"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="ConstrDecl"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ConstrDecl</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ConstrDecl</span> <span class='hs-conid'>QualIdent</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-keyglyph'>]</span>
<a name="line-65"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="Type"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Type</span>
<a name="line-68"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TypeConstructor</span> <span class='hs-conid'>QualIdent</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-keyglyph'>]</span>
<a name="line-69"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TypeVariable</span> <span class='hs-conid'>Int</span>
<a name="line-70"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TypeArrow</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Type</span>
<a name="line-71"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TypeForall</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Int</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Type</span>
<a name="line-72"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-73"></a>
<a name="line-74"></a><a name="Literal"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Literal</span>
<a name="line-75"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Char</span> <span class='hs-conid'>Char</span>
<a name="line-76"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Int</span> <span class='hs-conid'>Integer</span>
<a name="line-77"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Float</span> <span class='hs-conid'>Double</span>
<a name="line-78"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-79"></a>
<a name="line-80"></a><a name="ConstrTerm"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ConstrTerm</span>
<a name="line-81"></a> <span class='hs-comment'>-- |literal patterns</span>
<a name="line-82"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LiteralPattern</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Literal</span>
<a name="line-83"></a> <span class='hs-comment'>-- |constructors</span>
<a name="line-84"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstructorPattern</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>QualIdent</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ident</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-85"></a> <span class='hs-comment'>-- |default</span>
<a name="line-86"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>VariablePattern</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Ident</span>
<a name="line-87"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-88"></a>
<a name="line-89"></a><a name="Expression"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Expression</span>
<a name="line-90"></a> <span class='hs-comment'>-- |literal constants</span>
<a name="line-91"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Literal</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Literal</span>
<a name="line-92"></a> <span class='hs-comment'>-- |variables</span>
<a name="line-93"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Variable</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Ident</span>
<a name="line-94"></a> <span class='hs-comment'>-- |functions</span>
<a name="line-95"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Function</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>QualIdent</span> <span class='hs-conid'>Int</span>
<a name="line-96"></a> <span class='hs-comment'>-- |constructors</span>
<a name="line-97"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Constructor</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>QualIdent</span> <span class='hs-conid'>Int</span>
<a name="line-98"></a> <span class='hs-comment'>-- |applications</span>
<a name="line-99"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Apply</span> <span class='hs-conid'>Expression</span> <span class='hs-conid'>Expression</span>
<a name="line-100"></a> <span class='hs-comment'>-- |case expressions</span>
<a name="line-101"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Case</span> <span class='hs-conid'>Eval</span> <span class='hs-conid'>Expression</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Alt</span><span class='hs-keyglyph'>]</span>
<a name="line-102"></a> <span class='hs-comment'>-- |non-deterministic or</span>
<a name="line-103"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-conid'>Expression</span> <span class='hs-conid'>Expression</span>
<a name="line-104"></a> <span class='hs-comment'>-- |exist binding (introduction of a free variable)</span>
<a name="line-105"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Exist</span> <span class='hs-conid'>Ident</span> <span class='hs-conid'>Expression</span>
<a name="line-106"></a> <span class='hs-comment'>-- |let binding</span>
<a name="line-107"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Let</span> <span class='hs-conid'>Binding</span> <span class='hs-conid'>Expression</span>
<a name="line-108"></a> <span class='hs-comment'>-- |letrec binding</span>
<a name="line-109"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Letrec</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Binding</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Expression</span>
<a name="line-110"></a> <span class='hs-comment'>-- |typed expression</span>
<a name="line-111"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Typed</span> <span class='hs-conid'>Expression</span> <span class='hs-conid'>Type</span>
<a name="line-112"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-113"></a>
<a name="line-114"></a><a name="Eval"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Eval</span>
<a name="line-115"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Rigid</span>
<a name="line-116"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Flex</span>
<a name="line-117"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-118"></a>
<a name="line-119"></a><a name="Alt"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Alt</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-conid'>ConstrTerm</span> <span class='hs-conid'>Expression</span>
<a name="line-120"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-121"></a>
<a name="line-122"></a><a name="Binding"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Binding</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Binding</span> <span class='hs-conid'>Ident</span> <span class='hs-conid'>Expression</span>
<a name="line-123"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="instance%20Expr%20Expression"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Expr</span> <span class='hs-conid'>Expression</span> <span class='hs-keyword'>where</span>
<a name="line-126"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Variable</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>v</span><span class='hs-keyglyph'>]</span>
<a name="line-127"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Apply</span> <span class='hs-varid'>e1</span> <span class='hs-varid'>e2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e1</span> <span class='hs-varop'>++</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e2</span>
<a name="line-128"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Case</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span> <span class='hs-varid'>alts</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e</span> <span class='hs-varop'>++</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>alts</span>
<a name="line-129"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Or</span> <span class='hs-varid'>e1</span> <span class='hs-varid'>e2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e1</span> <span class='hs-varop'>++</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e2</span>
<a name="line-130"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exist</span> <span class='hs-varid'>v</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varop'>/=</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fv</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-131"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Let</span> <span class='hs-layout'>(</span><span class='hs-conid'>Binding</span> <span class='hs-varid'>v</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span> <span class='hs-varid'>e2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e1</span> <span class='hs-varop'>++</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varop'>/=</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fv</span> <span class='hs-varid'>e2</span><span class='hs-layout'>)</span>
<a name="line-132"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Letrec</span> <span class='hs-varid'>bds</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varop'>`notElem`</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fv</span> <span class='hs-varid'>es</span> <span class='hs-varop'>++</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-133"></a> <span class='hs-keyword'>where</span> <span class='hs-layout'>(</span><span class='hs-varid'>vs</span><span class='hs-layout'>,</span> <span class='hs-varid'>es</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzip</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-varid'>e'</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Binding</span> <span class='hs-varid'>v</span> <span class='hs-varid'>e'</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>bds</span><span class='hs-keyglyph'>]</span>
<a name="line-134"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typed</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e</span>
<a name="line-135"></a> <span class='hs-varid'>fv</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-136"></a>
<a name="line-137"></a><a name="instance%20Expr%20Alt"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Expr</span> <span class='hs-conid'>Alt</span> <span class='hs-keyword'>where</span>
<a name="line-138"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-conid'>ConstructorPattern</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varop'>`notElem`</span> <span class='hs-varid'>map</span> <span class='hs-varid'>snd</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fv</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-139"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-conid'>VariablePattern</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span> <span class='hs-varop'>/=</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fv</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-140"></a> <span class='hs-varid'>fv</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fv</span> <span class='hs-varid'>e</span>
</pre></body>
</html>
|