This file is indexed.

/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 -&gt; b) -&gt; (a,b) -&gt; c -&gt; (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 -&gt; 0) -&gt; (1,0) -&gt; 2 -&gt; (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'>&lt;-</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>