This file is indexed.

/usr/share/doc/libghc-haxml-doc/html/src/Text-XML-HaXml-Schema-Environment.html is in libghc-haxml-doc 1:1.23.3-2build1.

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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<?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/Text/XML/HaXml/Schema/Environment.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE PatternGuards #-}</span>
<a name="line-2"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>XML</span><span class='hs-varop'>.</span><span class='hs-conid'>HaXml</span><span class='hs-varop'>.</span><span class='hs-conid'>Schema</span><span class='hs-varop'>.</span><span class='hs-conid'>Environment</span>
<a name="line-3"></a>  <span class='hs-layout'>(</span> <span class='hs-keyword'>module</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>XML</span><span class='hs-varop'>.</span><span class='hs-conid'>HaXml</span><span class='hs-varop'>.</span><span class='hs-conid'>Schema</span><span class='hs-varop'>.</span><span class='hs-conid'>Environment</span>
<a name="line-4"></a>  <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-5"></a>
<a name="line-6"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>XML</span><span class='hs-varop'>.</span><span class='hs-conid'>HaXml</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span> <span class='hs-layout'>(</span><span class='hs-conid'>QName</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'>Name</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'>Namespace</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-7"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>XML</span><span class='hs-varop'>.</span><span class='hs-conid'>HaXml</span><span class='hs-varop'>.</span><span class='hs-conid'>Schema</span><span class='hs-varop'>.</span><span class='hs-conid'>XSDTypeModel</span>
<a name="line-8"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>XML</span><span class='hs-varop'>.</span><span class='hs-conid'>HaXml</span><span class='hs-varop'>.</span><span class='hs-conid'>Schema</span><span class='hs-varop'>.</span><span class='hs-conid'>NameConversion</span> <span class='hs-layout'>(</span><span class='hs-varid'>wordsBy</span><span class='hs-layout'>)</span>
<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>XML</span><span class='hs-varop'>.</span><span class='hs-conid'>HaXml</span><span class='hs-varop'>.</span><span class='hs-conid'>Schema</span><span class='hs-varop'>.</span><span class='hs-conid'>Parse</span> <span class='hs-layout'>(</span><span class='hs-varid'>targetPrefix</span><span class='hs-layout'>)</span>
<a name="line-10"></a>
<a name="line-11"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Map</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Map</span>
<a name="line-12"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Map</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-layout'>)</span>
<a name="line-13"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldl'</span><span class='hs-layout'>)</span>
<a name="line-14"></a>
<a name="line-15"></a><span class='hs-comment'>-- Some things we probably want to do.</span>
<a name="line-16"></a><span class='hs-comment'>-- * Build Maps from :</span>
<a name="line-17"></a><span class='hs-comment'>--       typename        to definition</span>
<a name="line-18"></a><span class='hs-comment'>--       element name    to definition</span>
<a name="line-19"></a><span class='hs-comment'>--       attribute name  to definition</span>
<a name="line-20"></a><span class='hs-comment'>--       (element) group to definition</span>
<a name="line-21"></a><span class='hs-comment'>--       attribute group to definition</span>
<a name="line-22"></a><span class='hs-comment'>--       abstract complextype to its extension types</span>
<a name="line-23"></a><span class='hs-comment'>--       substitution group to its substitutable elements</span>
<a name="line-24"></a><span class='hs-comment'>--       abstract/substGroup to defining module</span>
<a name="line-25"></a><span class='hs-comment'>-- * XSD types become top-level types in Haskell.</span>
<a name="line-26"></a><span class='hs-comment'>-- * XSD element decls also become top-level types in Haskell.</span>
<a name="line-27"></a><span class='hs-comment'>-- * Element groups get their own Haskell types too.</span>
<a name="line-28"></a><span class='hs-comment'>-- * Attributes and attribute groups do not become types, they are</span>
<a name="line-29"></a><span class='hs-comment'>--   simply constituent parts of an element.</span>
<a name="line-30"></a><span class='hs-comment'>-- * Resolve element/attribute references by inlining their names.</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-comment'>-- If a complextype definition includes nested in-line decls of other</span>
<a name="line-33"></a><span class='hs-comment'>-- types, we need to be able to lift them out to the top-level, then</span>
<a name="line-34"></a><span class='hs-comment'>-- refer to them by name only at the nested position(?)</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-comment'>-- When dealing with sub/supertype relationships, we often need to know all</span>
<a name="line-37"></a><span class='hs-comment'>-- of the subtypes of a supertype before some of the subtypes are actually</span>
<a name="line-38"></a><span class='hs-comment'>-- available in scope.  The environment must therefore first be closed</span>
<a name="line-39"></a><span class='hs-comment'>-- over all modules: the resulting type mapping (env_type) should be _copied_</span>
<a name="line-40"></a><span class='hs-comment'>-- across to (env_allTypes) in a fresh initial environment, which latter is</span>
<a name="line-41"></a><span class='hs-comment'>-- then used to rebuild the local scope from scratch.</span>
<a name="line-42"></a><span class='hs-comment'>-- Likewise, the mappings from supertype-&gt;subtype (env_extendty) and for</span>
<a name="line-43"></a><span class='hs-comment'>-- substitution groups (env_substGrp) also need to be global.</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="Environment"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Environment</span> <span class='hs-keyglyph'>=</span>  <span class='hs-conid'>Environment</span>
<a name="line-46"></a>    <span class='hs-layout'>{</span> <span class='hs-varid'>env_type</span>      <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SimpleType</span> <span class='hs-conid'>ComplexType</span><span class='hs-layout'>)</span>
<a name="line-47"></a>                                 <span class='hs-comment'>-- ^ type definitions in scope</span>
<a name="line-48"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_allTypes</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SimpleType</span> <span class='hs-conid'>ComplexType</span><span class='hs-layout'>)</span>
<a name="line-49"></a>                                 <span class='hs-comment'>-- ^ all type definitions, regardless of scope</span>
<a name="line-50"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_element</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>ElementDecl</span>
<a name="line-51"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_attribute</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>AttributeDecl</span>
<a name="line-52"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_group</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>Group</span>
<a name="line-53"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_attrgroup</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>AttrGroup</span>
<a name="line-54"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_namespace</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>String</span><span class='hs-comment'>{-URI-}</span> <span class='hs-conid'>String</span><span class='hs-comment'>{-Prefix-}</span>
<a name="line-55"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_extendty</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>QName</span><span class='hs-layout'>,</span><span class='hs-conid'>FilePath</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ supertype -&gt; subtypes</span>
<a name="line-56"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_substGrp</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>QName</span><span class='hs-layout'>,</span><span class='hs-conid'>FilePath</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ substitution groups</span>
<a name="line-57"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_typeloc</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>FilePath</span>           <span class='hs-comment'>-- ^ where type is defined</span>
<a name="line-58"></a>    <span class='hs-layout'>}</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="emptyEnv"></a><span class='hs-comment'>-- | An empty environment of XSD type mappings.</span>
<a name="line-61"></a><span class='hs-definition'>emptyEnv</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Environment</span>
<a name="line-62"></a><span class='hs-definition'>emptyEnv</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Environment</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span>
<a name="line-63"></a>                       <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="combineEnv"></a><span class='hs-comment'>-- | Combine two environments (e.g. read from different interface files)</span>
<a name="line-66"></a><span class='hs-definition'>combineEnv</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Environment</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Environment</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Environment</span>
<a name="line-67"></a><span class='hs-definition'>combineEnv</span> <span class='hs-varid'>e1</span> <span class='hs-varid'>e0</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Environment</span>
<a name="line-68"></a>    <span class='hs-layout'>{</span> <span class='hs-varid'>env_type</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_type</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span>      <span class='hs-layout'>(</span><span class='hs-varid'>env_type</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-69"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_allTypes</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_allTypes</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span>  <span class='hs-layout'>(</span><span class='hs-varid'>env_allTypes</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-70"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_element</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_element</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-varid'>env_element</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-71"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_attribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_attribute</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_attribute</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-72"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_group</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_group</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span>     <span class='hs-layout'>(</span><span class='hs-varid'>env_group</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-73"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_attrgroup</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_attrgroup</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_attrgroup</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-74"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_namespace</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_namespace</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_namespace</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-75"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_extendty</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>unionWith</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_extendty</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_extendty</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-76"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_substGrp</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>unionWith</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_substGrp</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_substGrp</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-77"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>env_typeloc</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_typeloc</span> <span class='hs-varid'>e1</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-varid'>env_typeloc</span> <span class='hs-varid'>e0</span><span class='hs-layout'>)</span>
<a name="line-78"></a>    <span class='hs-layout'>}</span>
<a name="line-79"></a>
<a name="line-80"></a><a name="mkEnvironment"></a><span class='hs-comment'>-- | Build an environment of XSD type mappings from a schema module.</span>
<a name="line-81"></a><span class='hs-definition'>mkEnvironment</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Schema</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Environment</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Environment</span>
<a name="line-82"></a><span class='hs-definition'>mkEnvironment</span> <span class='hs-varid'>fp</span> <span class='hs-varid'>s</span> <span class='hs-varid'>init</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldl'</span> <span class='hs-varid'>item</span> <span class='hs-layout'>(</span><span class='hs-varid'>addNS</span> <span class='hs-varid'>init</span> <span class='hs-layout'>(</span><span class='hs-varid'>schema_namespaces</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-83"></a>                                      <span class='hs-layout'>(</span><span class='hs-varid'>schema_items</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-84"></a>  <span class='hs-keyword'>where</span>
<a name="line-85"></a>    <span class='hs-comment'>-- think about qualification, w.r.t targetNamespace, elementFormDefault, etc</span>
<a name="line-86"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>Include</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>       <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-87"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>Import</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-88"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>Redefine</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>	<span class='hs-comment'>-- revisit this</span>
<a name="line-89"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>Annotation</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-90"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simple</span> <span class='hs-varid'>st</span><span class='hs-layout'>)</span>         <span class='hs-keyglyph'>=</span> <span class='hs-varid'>simple</span> <span class='hs-varid'>env</span> <span class='hs-varid'>st</span>
<a name="line-91"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>Complex</span> <span class='hs-varid'>ct</span><span class='hs-layout'>)</span>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>complex</span> <span class='hs-varid'>env</span> <span class='hs-varid'>ct</span>
<a name="line-92"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>SchemaElement</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>elementDecl</span> <span class='hs-varid'>env</span> <span class='hs-varid'>e</span>
<a name="line-93"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>SchemaAttribute</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>attributeDecl</span> <span class='hs-varid'>env</span> <span class='hs-varid'>a</span>
<a name="line-94"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeGroup</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>attrGroup</span> <span class='hs-varid'>env</span> <span class='hs-varid'>g</span>
<a name="line-95"></a>    <span class='hs-varid'>item</span> <span class='hs-varid'>env</span> <span class='hs-layout'>(</span><span class='hs-conid'>SchemaGroup</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>group</span> <span class='hs-varid'>env</span> <span class='hs-varid'>g</span>
<a name="line-96"></a>
<a name="line-97"></a>    <span class='hs-varid'>simple</span> <span class='hs-varid'>env</span> <span class='hs-varid'>s</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>Restricted</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-98"></a>                                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_type</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-99"></a>                                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_type</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-100"></a>    <span class='hs-varid'>simple</span> <span class='hs-varid'>env</span> <span class='hs-varid'>s</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>ListOf</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-101"></a>                                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_type</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-102"></a>                                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_type</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-103"></a>    <span class='hs-varid'>simple</span> <span class='hs-varid'>env</span> <span class='hs-varid'>s</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>UnionOf</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-104"></a>                                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_type</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-105"></a>                                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_type</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-106"></a>    <span class='hs-varid'>simple</span> <span class='hs-varid'>env</span>   <span class='hs-keyword'>_</span>               <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-107"></a>
<a name="line-108"></a>    <span class='hs-comment'>-- Only toplevel names have global scope.</span>
<a name="line-109"></a>    <span class='hs-comment'>-- Should we lift local names to toplevel with prefixed names?</span>
<a name="line-110"></a>    <span class='hs-comment'>-- Or thread the environment explicitly through every tree-walker?</span>
<a name="line-111"></a>    <span class='hs-comment'>-- Or resolve every reference to its referent in a single resolution pass?</span>
<a name="line-112"></a>    <span class='hs-comment'>-- (Latter not good, because it potentially duplicates exprs?)</span>
<a name="line-113"></a>    <span class='hs-varid'>complex</span> <span class='hs-varid'>env</span> <span class='hs-varid'>c</span>
<a name="line-114"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>complex_name</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-115"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>n</span>  <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>complex_name</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span>
<a name="line-116"></a>              <span class='hs-varid'>either</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span>
<a name="line-117"></a>                     <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>extn</span> <span class='hs-varid'>env</span><span class='hs-keyglyph'>-&gt;</span>
<a name="line-118"></a>                        <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_extendty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insertWith</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span><span class='hs-layout'>)</span>
<a name="line-119"></a>                                               <span class='hs-layout'>(</span><span class='hs-varid'>extension_base</span> <span class='hs-varid'>extn</span><span class='hs-layout'>)</span>
<a name="line-120"></a>                                               <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>,</span> <span class='hs-varid'>fp</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-121"></a>                                               <span class='hs-layout'>(</span><span class='hs-varid'>env_extendty</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-122"></a>                     <span class='hs-layout'>(</span><span class='hs-varid'>isExtn</span> <span class='hs-layout'>(</span><span class='hs-varid'>complex_content</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-123"></a>              <span class='hs-varop'>$</span> <span class='hs-layout'>(</span><span class='hs-keyword'>if</span> <span class='hs-varid'>complex_abstract</span> <span class='hs-varid'>c</span> <span class='hs-keyword'>then</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>env</span><span class='hs-keyglyph'>-&gt;</span>
<a name="line-124"></a>              <span class='hs-comment'>-- because an abstract type might have no concrete instantiations!</span>
<a name="line-125"></a>                        <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_extendty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insertWith</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span><span class='hs-layout'>)</span>
<a name="line-126"></a>                                               <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span>
<a name="line-127"></a>                                               <span class='hs-conid'>[]</span>
<a name="line-128"></a>                                               <span class='hs-layout'>(</span><span class='hs-varid'>env_extendty</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-129"></a>                 <span class='hs-keyword'>else</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span>
<a name="line-130"></a>              <span class='hs-varop'>$</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_type</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_type</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span>
<a name="line-131"></a>                   <span class='hs-layout'>,</span><span class='hs-varid'>env_typeloc</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-varid'>fp</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_typeloc</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-132"></a>          <span class='hs-keyword'>where</span> <span class='hs-varid'>isExtn</span> <span class='hs-varid'>x</span><span class='hs-keyglyph'>@</span><span class='hs-conid'>SimpleContent</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ci_stuff</span> <span class='hs-varid'>x</span>
<a name="line-133"></a>                <span class='hs-varid'>isExtn</span> <span class='hs-varid'>x</span><span class='hs-keyglyph'>@</span><span class='hs-conid'>ComplexContent</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ci_stuff</span> <span class='hs-varid'>x</span>
<a name="line-134"></a>                <span class='hs-varid'>isExtn</span> <span class='hs-varid'>x</span><span class='hs-keyglyph'>@</span><span class='hs-conid'>ThisType</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-varid'>undefined</span>
<a name="line-135"></a><span class='hs-comment'>{-
<a name="line-136"></a>      | Nothing &lt;- complex_name c = env
<a name="line-137"></a>      | Right extn &lt;- isExtn $ complex_content c
<a name="line-138"></a>      , Just n  &lt;- complex_name c = env{env_extendty =
<a name="line-139"></a>                                            Map.insertWith (++)
<a name="line-140"></a>                                                (extension_base extn)
<a name="line-141"></a>                                                [(mkN n, isFwd)]
<a name="line-142"></a>                                                (env_extendty env)
<a name="line-143"></a>                                       ,env_type=Map.insert (mkN n) (Right c)
<a name="line-144"></a>                                                            (env_type env)}
<a name="line-145"></a>      | Just n  &lt;- complex_name c = env{env_type=Map.insert (mkN n) (Right c)
<a name="line-146"></a>                                                            (env_type env)}
<a name="line-147"></a>          where isExtn x@SimpleContent{}  = ci_stuff x
<a name="line-148"></a>                isExtn x@ComplexContent{} = ci_stuff x
<a name="line-149"></a>                isExtn x@ThisType{}       = Left undefined
<a name="line-150"></a>                isFwd = case Map.lookup (extension_base extn) (env_typeloc env) of
<a name="line-151"></a>                          Nothing  -&gt; error $ "unknown supertype of "++show c
<a name="line-152"></a>                          Just mod -&gt; mod /= fp
<a name="line-153"></a>-}</span>
<a name="line-154"></a>    <span class='hs-varid'>elementDecl</span> <span class='hs-varid'>env</span> <span class='hs-varid'>e</span>
<a name="line-155"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>elem_nameOrRef</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-156"></a><span class='hs-comment'>--    | Just sg &lt;- elem_substGroup e</span>
<a name="line-157"></a><span class='hs-comment'>--    , Left nt &lt;- elem_nameOrRef e = env{env_substGrp=Map.insertWith (++) sg</span>
<a name="line-158"></a><span class='hs-comment'>--                                                [(mkN $ theName nt, isFwd sg)]</span>
<a name="line-159"></a><span class='hs-comment'>--                                                        (env_substGrp env)</span>
<a name="line-160"></a><span class='hs-comment'>--                                       ,env_element=Map.insert</span>
<a name="line-161"></a><span class='hs-comment'>--                                                        (mkN $ theName nt) e</span>
<a name="line-162"></a><span class='hs-comment'>--                                                        (env_element env)}</span>
<a name="line-163"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Left</span> <span class='hs-varid'>nt</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>elem_nameOrRef</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span>
<a name="line-164"></a>              <span class='hs-varid'>maybe</span> <span class='hs-varid'>id</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>sg</span> <span class='hs-varid'>env</span><span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_substGrp</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insertWith</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-varid'>sg</span>
<a name="line-165"></a>                                          <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varop'>$</span> <span class='hs-varid'>theName</span> <span class='hs-varid'>nt</span><span class='hs-layout'>,</span> <span class='hs-varid'>fp</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-166"></a>                                          <span class='hs-layout'>(</span><span class='hs-varid'>env_substGrp</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-167"></a>                    <span class='hs-layout'>(</span><span class='hs-varid'>elem_substGroup</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-168"></a>              <span class='hs-varop'>$</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_element</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varop'>$</span> <span class='hs-varid'>theName</span> <span class='hs-varid'>nt</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span>
<a name="line-169"></a>                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_element</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span>
<a name="line-170"></a>                   <span class='hs-layout'>,</span><span class='hs-varid'>env_typeloc</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varop'>$</span> <span class='hs-varid'>theName</span> <span class='hs-varid'>nt</span><span class='hs-layout'>)</span> <span class='hs-varid'>fp</span>
<a name="line-171"></a>                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_typeloc</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-172"></a>    <span class='hs-varid'>attributeDecl</span> <span class='hs-varid'>env</span> <span class='hs-varid'>a</span>
<a name="line-173"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>attr_nameOrRef</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-174"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Left</span> <span class='hs-varid'>nt</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>attr_nameOrRef</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_attribute</span><span class='hs-keyglyph'>=</span>
<a name="line-175"></a>                                            <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varop'>$</span> <span class='hs-varid'>theName</span> <span class='hs-varid'>nt</span><span class='hs-layout'>)</span> <span class='hs-varid'>a</span>
<a name="line-176"></a>                                                       <span class='hs-layout'>(</span><span class='hs-varid'>env_attribute</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-177"></a>    <span class='hs-varid'>attrGroup</span> <span class='hs-varid'>env</span> <span class='hs-varid'>g</span>
<a name="line-178"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>attrgroup_nameOrRef</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-179"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Left</span> <span class='hs-varid'>n</span>  <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>attrgroup_nameOrRef</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_attrgroup</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span>
<a name="line-180"></a>                                                           <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-varid'>g</span>
<a name="line-181"></a>                                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_attrgroup</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-182"></a>    <span class='hs-varid'>group</span> <span class='hs-varid'>env</span> <span class='hs-varid'>g</span>
<a name="line-183"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>group_nameOrRef</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span>
<a name="line-184"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Left</span> <span class='hs-varid'>n</span>  <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>group_nameOrRef</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_group</span><span class='hs-keyglyph'>=</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>mkN</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-varid'>g</span>
<a name="line-185"></a>                                                           <span class='hs-layout'>(</span><span class='hs-varid'>env_group</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span>
<a name="line-186"></a>    <span class='hs-varid'>mkN</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>N</span> <span class='hs-varop'>.</span> <span class='hs-varid'>last</span> <span class='hs-varop'>.</span> <span class='hs-varid'>wordsBy</span> <span class='hs-layout'>(</span><span class='hs-varop'>==</span><span class='hs-chr'>':'</span><span class='hs-layout'>)</span>
<a name="line-187"></a>
<a name="line-188"></a>    <span class='hs-varid'>addNS</span> <span class='hs-varid'>env</span> <span class='hs-varid'>nss</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>env</span><span class='hs-layout'>{</span><span class='hs-varid'>env_namespace</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldr</span> <span class='hs-varid'>newNS</span> <span class='hs-layout'>(</span><span class='hs-varid'>env_namespace</span> <span class='hs-varid'>env</span><span class='hs-layout'>)</span> <span class='hs-varid'>nss</span><span class='hs-layout'>}</span>
<a name="line-189"></a>              <span class='hs-keyword'>where</span> <span class='hs-varid'>newNS</span> <span class='hs-varid'>ns</span> <span class='hs-varid'>env</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>nsURI</span> <span class='hs-varid'>ns</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>nsPrefix</span> <span class='hs-varid'>ns</span><span class='hs-layout'>)</span> <span class='hs-varid'>env</span>
<a name="line-190"></a>
<a name="line-191"></a><a name="gatherImports"></a><span class='hs-comment'>-- | Find all direct module dependencies.</span>
<a name="line-192"></a><span class='hs-definition'>gatherImports</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Schema</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-193"></a><span class='hs-definition'>gatherImports</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span>
<a name="line-194"></a>    <span class='hs-keyglyph'>[</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span><span class='hs-layout'>,</span><span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-conid'>Include</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>schema_items</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>]</span> <span class='hs-varop'>++</span>
<a name="line-195"></a>    <span class='hs-keyglyph'>[</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span><span class='hs-layout'>,</span><span class='hs-varid'>ns</span><span class='hs-layout'>)</span>       <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-conid'>Import</span> <span class='hs-varid'>uri</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>schema_items</span> <span class='hs-varid'>s</span>
<a name="line-196"></a>                   <span class='hs-layout'>,</span> <span class='hs-keyword'>let</span> <span class='hs-varid'>ns</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>targetPrefix</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>uri</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>schema_namespaces</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>]</span>
<a name="line-197"></a>
</pre></body>
</html>