/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->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 -> 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'>-></span> <span class='hs-conid'>Environment</span> <span class='hs-keyglyph'>-></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'>-></span> <span class='hs-conid'>Schema</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Environment</span> <span class='hs-keyglyph'>-></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'><-</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'><-</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'>-></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'>-></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 <- complex_name c = env
<a name="line-137"></a> | Right extn <- isExtn $ complex_content c
<a name="line-138"></a> , Just n <- 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 <- 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 -> error $ "unknown supertype of "++show c
<a name="line-152"></a> Just mod -> 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'><-</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 <- elem_substGroup e</span>
<a name="line-157"></a><span class='hs-comment'>-- , Left nt <- 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'><-</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'>-></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'><-</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'><-</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'><-</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'><-</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'><-</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'><-</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'>-></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'><-</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'><-</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>
|