44b76074bc8d2d8015cf54a2e756c674d2caaeab9628e0d34859f6a0c342243a.tri (23607B)
1 !import prelude * 2 !import io * 3 !import source_object * 4 !import source_unit * 5 !import source_resolve * 6 !import source_lexer * 7 !import parser * 8 !export * 9 10 -- Initial executable-only Arboricx manifest: exact existing Haskell v1 11 -- encoding with no contract fields. A row is name -> whole tree-term object. 12 sourceModuleHeader = "arboricx.module-manifest.v1\n" 13 sourceModuleEscapeByte byte = 14 matchBool "%25" 15 (matchBool "%09" 16 (matchBool "%0A" (matchBool "%0D" (pair byte t) 17 (equal? byte 13)) (equal? byte 10)) (equal? byte 9)) 18 (equal? byte 37) 19 sourceModuleEscape_ self bytes = 20 lazyList 21 (_ : t) 22 (byte rest : append (sourceModuleEscapeByte byte) (self rest)) 23 bytes 24 sourceModuleEscape bytes = y sourceModuleEscape_ bytes 25 sourceModuleUnescapeCode a b = 26 matchBool (ok 37 t) 27 (matchBool (ok 9 t) 28 (matchBool (ok 10 t) (matchBool (ok 13 t) 29 (err "invalid manifest escape" t) 30 (and? (equal? a 48) (equal? b 68))) 31 (and? (equal? a 48) (equal? b 65))) 32 (and? (equal? a 48) (equal? b 57))) 33 (and? (equal? a 50) (equal? b 53)) 34 sourceModuleUnescape_ self bytes = 35 lazyList 36 (_ : ok t t) 37 (byte rest : lazyBool 38 (_ : lazyList 39 (_ : err "truncated manifest escape" t) 40 (a tail : lazyList 41 (_ : err "truncated manifest escape" t) 42 (b remaining : lazyResult 43 (problem unused : err problem t) 44 (decoded unused : lazyResult 45 (problem unused : err problem t) 46 (suffix unused : ok (pair decoded suffix) t) 47 (self remaining)) 48 (sourceModuleUnescapeCode a b)) 49 tail) 50 rest) 51 (_ : lazyResult 52 (problem unused : err problem t) 53 (suffix unused : ok (pair byte suffix) t) 54 (self rest)) 55 (equal? byte 37)) 56 bytes 57 sourceModuleUnescape bytes = y sourceModuleUnescape_ bytes 58 sourceModuleRow name hash = 59 append "export\t" (append (sourceModuleEscape name) 60 (append "\tarboricx.tree-term.v1\t" 61 (append hash "\tarboricx.abi.tree.v1\n"))) 62 sourceModuleEncode_ self entries = 63 lazyList 64 (_ : t) 65 (entry rest : append (sourceModuleRow (fst entry) (snd entry)) (self rest)) 66 entries 67 sourceModuleEncode entries = 68 append sourceModuleHeader (y sourceModuleEncode_ entries) 69 70 -- Reject malformed/unrecognized rows and duplicate names. Re-encoding 71 -- validates exact canonical bytes, including trailing newline and row order. 72 sourceModuleRows_ self rows seen = 73 lazyList 74 (_ : ok (reverse seen) t) 75 (row rest : 76 lazyList 77 (_ : lazyList 78 (_ : ok (reverse seen) t) 79 (_ _ : err "blank manifest row" t) 80 rest) 81 (_ _ : sourceModuleRowParse row rest seen self) 82 row) 83 rows 84 sourceModuleRowParse row rest seen self = 85 lazyList 86 (_ : err "invalid module manifest row" t) 87 (a tail1 : lazyList 88 (_ : err "invalid module manifest row" t) 89 (encodedName tail2 : lazyResult 90 (problem unused : err problem t) 91 (name unused : lazyList 92 (_ : err "invalid module manifest row" t) 93 (kind tail3 : lazyList 94 (_ : err "invalid module manifest row" t) 95 (hash tail4 : lazyList 96 (_ : err "invalid module manifest row" t) 97 (abi extra : lazyBool 98 (_ : lazyBool 99 (_ : lazyBool 100 (_ : lazyBool 101 (_ : lazyMaybe 102 (_ : self rest (pair (pair name hash) seen)) 103 (_ : err "duplicate module export" t) 104 (sourceFindExternal seen name)) 105 (_ : err "unsupported export ABI" t) 106 (equal? abi sourceObjectTreeAbi)) 107 (_ : err "unsupported export kind" t) 108 (equal? kind sourceObjectTreeKind)) 109 (_ : err "invalid export name or digest" t) 110 (and? (sourceModuleExportNameValid name) 111 (sourceModuleDigest? hash))) 112 (_ : err "invalid module manifest row" t) 113 (emptyList? extra)) 114 tail4) 115 tail3) 116 tail2) 117 (sourceModuleUnescape encodedName)) 118 tail1) 119 (splitOnByte 9 row) 120 -- Keep parser dependencies below the recursive worker, not in a top-level y. 121 sourceModuleDecode bytes = 122 lazyList 123 (_ : err "empty module manifest" t) 124 (header rows : lazyBool 125 (_ : lazyResult 126 (problem remaining : err problem remaining) 127 (exports remaining : lazyBool 128 (_ : ok exports t) 129 (_ : err "noncanonical module manifest" t) 130 (equal? bytes (sourceModuleEncode exports))) 131 (y sourceModuleRows_ rows t)) 132 (_ : err "unsupported module manifest version" t) 133 (equal? header "arboricx.module-manifest.v1")) 134 (splitOnByte 10 bytes) 135 136 sourceModuleEntriesValid_ self entries seen = 137 lazyList 138 (_ : true) 139 (entry rest : andLazy? 140 (and? (sourceModuleExportNameValid (fst entry)) 141 (and? (sourceModuleDigest? (snd entry)) 142 (lazyMaybe true (_ : false) 143 (sourceFindExternal seen (fst entry))))) 144 (_ : self rest (pair entry seen))) 145 entries 146 sourceModulePutManifest root entries = 147 lazyList 148 (_ : pure (err "module requires an export" t)) 149 (_ _ : lazyBool 150 (_ : sourceObjectStore root sourceObjectManifestDomain 151 (sourceModuleEncode entries)) 152 (_ : pure (err "invalid or duplicate module export" t)) 153 (y sourceModuleEntriesValid_ entries t)) 154 entries 155 sourceModuleGetManifest root hash = 156 onResult_ (sourceObjectGet root sourceObjectManifestDomain hash) 157 (problem : pure (err problem t)) 158 (payload : pure (sourceModuleDecode payload)) 159 160 -- Workspace module aliases use the pre-existing neutral alias file format. 161 -- A consuming source may instead put the full immutable manifest hash here. 162 -- A v1 name containing '%' must be escaped by the Haskell codec. This 163 -- bounded producer accepts unescaped ASCII identifiers only. 164 sourceModuleExportChar? byte = sourceNameContinue? byte 165 sourceModuleExportNameRest_ self name = 166 lazyList 167 (_ : true) 168 (byte rest : andLazy? (sourceModuleExportChar? byte) 169 (_ : self rest)) 170 name 171 sourceModuleExportNameValid name = 172 lazyList 173 (_ : false) 174 (first rest : andLazy? (sourceNameStart? first) 175 (_ : y sourceModuleExportNameRest_ rest)) 176 name 177 178 sourceModuleAliasByte? byte = 179 or? (sourceAsciiLetter? byte) 180 (or? (sourceAsciiDigit? byte) 181 (or? (equal? byte 95) (equal? byte 45))) 182 sourceModuleAliasValid_ self bytes = 183 lazyList 184 (_ : true) 185 (byte rest : andLazy? (sourceModuleAliasByte? byte) 186 (_ : self rest)) 187 bytes 188 sourceModuleAliasValid alias = 189 lazyList 190 (_ : false) 191 (first rest : andLazy? (sourceNameStart? first) 192 (_ : y sourceModuleAliasValid_ rest)) 193 alias 194 sourceModuleDigest? bytes = sourceObjectHashValid bytes 195 sourceModuleAliasPath root alias = 196 append root (append "/aliases/modules/" alias) 197 sourceModuleAliasBytes hash = 198 append "kind: arboricx.module-manifest.v1\nhash: " 199 (append hash "\n") 200 sourceModuleResolveAlias root alias = 201 lazyBool 202 (_ : onResult_ (readFile (sourceModuleAliasPath root alias)) 203 (problem : pure (err problem t)) 204 (bytes : sourceModuleParseAlias bytes)) 205 (_ : pure (err "invalid module alias" t)) 206 (sourceModuleAliasValid alias) 207 sourceModuleParseAlias bytes = 208 lazyList 209 (_ : pure (err "invalid module alias" t)) 210 (kind rest : lazyList 211 (_ : pure (err "invalid module alias" t)) 212 (line trailing : lazyBool 213 (_ : sourceModuleParseAliasHash bytes line) 214 (_ : pure (err "invalid module alias" t)) 215 (equal? kind "kind: arboricx.module-manifest.v1")) 216 rest) 217 (splitOnByte 10 bytes) 218 sourceModuleParseAliasHash bytes line = 219 lazyList 220 (_ : pure (err "invalid module alias" t)) 221 (key tail : lazyList 222 (_ : pure (err "invalid module alias" t)) 223 (hash extra : lazyBool 224 (_ : lazyBool 225 (_ : pure (ok hash t)) 226 (_ : pure (err "noncanonical module alias" t)) 227 (equal? bytes (sourceModuleAliasBytes hash))) 228 (_ : pure (err "invalid module alias hash" t)) 229 (and? (equal? key "hash:") 230 (and? (emptyList? extra) (sourceModuleDigest? hash)))) 231 tail) 232 (splitOnByte 32 line) 233 sourceModuleResolveRef root ref = 234 lazyBool 235 (_ : pure (ok ref t)) 236 (_ : sourceModuleResolveAlias root ref) 237 (sourceModuleDigest? ref) 238 sourceModulePinAlias root alias hash = 239 lazyBool 240 (_ : lazyBool 241 (_ : onOk_ (sourceModuleGetManifest root hash) (_ : 242 onOk_ (createDirectory (append root "/aliases")) (_ : 243 onOk_ (createDirectory (append root "/aliases/modules")) (_ : 244 onOk_ (atomicWriteBytes (sourceModuleAliasPath root alias) 245 (sourceModuleAliasBytes hash)) (_ : pure (ok t t)))))) 246 (_ : pure (err "invalid manifest digest" t)) 247 (sourceModuleDigest? hash)) 248 (_ : pure (err "invalid module alias" t)) 249 (sourceModuleAliasValid alias) 250 sourceModuleGetRefManifest root ref = 251 onResult_ (sourceModuleResolveRef root ref) 252 (problem : pure (err problem t)) 253 (hash : sourceModuleGetManifest root hash) 254 255 -- Only selected exports hydrate; an unrelated changed tree is never loaded. 256 sourceModuleLoadSelected root manifestHash name = 257 onResult_ (sourceModuleGetRefManifest root manifestHash) 258 (problem : pure (err problem t)) 259 (exports : lazyMaybe 260 (_ : pure (err "missing module export" t)) 261 (hash : sourceObjectGetTree root hash) 262 (sourceFindExternal exports name)) 263 264 -- Compile a definitions-only source with explicitly resolved external trees. 265 -- Put every declared local export as an independent canonical tree-term. 266 -- Public IO builder: environment and export selection are explicit data; 267 -- no old !import resolver participates at runtime. 268 sourceModulePublish root environment source names = 269 lazyResult 270 (diagnostic unused : pure (err diagnostic t)) 271 (definitions unused : sourceModulePublishNames root definitions names) 272 (compileModuleDefinitions environment source) 273 sourceModulePublishNames root definitions names = 274 y sourceModulePublishNames_ names root definitions t 275 sourceModulePublishNames_ self names root definitions entries = 276 lazyList 277 (_ : lazyList 278 (_ : pure (err "module requires an export" t)) 279 (_ _ : sourceModulePutManifest root (reverse entries)) 280 entries) 281 (name rest : lazyMaybe 282 (_ : pure (err "undeclared local export" t)) 283 (tree : onResult_ (sourceObjectPutTree root tree) 284 (problem : pure (err problem t)) 285 (hash : lazyMaybe 286 (_ : self rest root definitions (pair (pair name hash) entries)) 287 (_ : pure (err "duplicate export" t)) 288 (sourceFindExternal entries name))) 289 (sourceFindExternal definitions name)) 290 names 291 292 -- One native header interpretation for tri, SCP and map staging. The result is 293 -- (ordered local edges, (import selections, (export selections, masked body))). 294 -- Masking keeps original character offsets and line/column locations. Local 295 -- imports and re-exports acquire edges; immutable hashes never do. !source is 296 -- build-only and cannot duplicate an acquired edge, even later in the header. 297 sourceHeaderLine_ self bytes reversed = (lazyList 298 (_ : pair (reverse reversed) t) 299 (byte rest : lazyBool (_ : pair (reverse reversed) bytes) 300 (_ : self rest (pair byte reversed)) (equal? byte 10)) bytes) 301 sourceHeaderLine bytes = y sourceHeaderLine_ bytes t 302 sourceHeaderComment? word = (lazyList (_ : false) 303 (a rest : lazyList (_ : false) 304 (b tail : and? (equal? a 45) (equal? b 45)) rest) word) 305 sourceHeaderMask byte = (lazyBool (_ : byte) (_ : 32) 306 (or? (equal? byte 10) (equal? byte 13))) 307 sourceHeaderError message position = 308 err (parserDiagnostic 40 message t position t) t 309 sourceHeaderContains_ self names name = (lazyList 310 (_ : false) 311 (item rest : lazyBool (_ : true) (_ : self rest name) 312 (equal? item name)) names) 313 sourceHeaderRefValid ref = 314 or? (sourceModuleDigest? ref) (sourceModuleAliasValid ref) 315 sourceHeaderEdge ref deps = (lazyBool 316 (_ : deps) 317 (_ : pair ref deps) 318 (or? (sourceModuleDigest? ref) (y sourceHeaderContains_ deps ref))) 319 sourceHeaderNext self policy line rest deps built uses exports prefix position = 320 (let newline = lazyList (_ : t) (_ _ : [10]) rest in 321 let full = append line newline in 322 let next = lazyList (_ : t) (_ tail : tail) rest in 323 self next policy deps built uses exports 324 (append (reverse (map sourceHeaderMask full)) prefix) 325 (foldl sourcePositionAdvance position full)) 326 sourceHeaderSourceShape arguments = (lazyList 327 (_ : err "!source requires a module name" t) 328 (name extra : lazyList 329 (_ : lazyBool (_ : ok name t) (_ : err "invalid build-only source" t) 330 (and? (sourceModuleAliasValid name) (not? (sourceModuleDigest? name)))) 331 (_ _ : err "unexpected !source arguments" t) extra) arguments) 332 sourceHeader_ self bytes policy deps built uses exports prefix position = (lazyList 333 (_ : ok (pair (reverse deps) (pair (reverse uses) 334 (pair (reverse exports) (reverse prefix)))) t) 335 (_ _ : let split = sourceHeaderLine bytes in 336 let line = fst split in 337 let rest = snd split in 338 lazyList 339 (_ : sourceHeaderNext self policy line rest deps built uses exports prefix position) 340 (word arguments : lazyBool 341 (_ : sourceHeaderNext self policy line rest deps built uses exports prefix position) 342 (_ : lazyBool 343 (_ : lazyResult 344 (problem _ : sourceHeaderError problem position) 345 (name _ : lazyBool 346 (_ : sourceHeaderError "redundant build-only source" position) 347 (_ : sourceHeaderNext self policy line rest (pair name deps) 348 (pair name built) uses exports prefix position) 349 (y sourceHeaderContains_ deps name)) 350 (sourceHeaderSourceShape arguments)) 351 (_ : lazyBool 352 (_ : lazyResult 353 (problem _ : sourceHeaderError problem position) 354 (spec _ : lazyBool 355 (_ : sourceHeaderError "redundant build-only source" position) 356 (_ : sourceHeaderNext self policy line rest 357 (sourceHeaderEdge (fst spec) deps) built 358 (pair arguments uses) exports prefix position) 359 (y sourceHeaderContains_ built (fst spec))) 360 (bindResult (sourceModuleUseShape arguments) 361 (spec _ : bindResult (policy spec) (_ _ : ok spec t)))) 362 (_ : lazyBool 363 (_ : lazyResult 364 (problem _ : sourceHeaderError problem position) 365 (spec _ : lazyBool 366 (_ : lazyBool 367 (_ : sourceHeaderError "redundant build-only source" position) 368 (_ : lazyBool 369 (_ : sourceHeaderNext self policy line rest 370 (sourceHeaderEdge (snd spec) deps) built uses 371 (pair arguments exports) prefix position) 372 (_ : sourceHeaderError "invalid re-export reference" position) 373 (sourceHeaderRefValid (snd spec))) 374 (y sourceHeaderContains_ built (snd spec))) 375 (_ : sourceHeaderNext self policy line rest deps built uses 376 (pair arguments exports) prefix position) 377 (equal? (fst spec) "from")) 378 (sourceModuleExportShape arguments)) 379 (_ : lazyBool 380 (_ : sourceHeaderError "unknown native header directive" position) 381 (_ : ok (pair (reverse deps) (pair (reverse uses) 382 (pair (reverse exports) (append (reverse prefix) bytes)))) t) 383 (equal? (head word) 33)) 384 (equal? word "!export")) 385 (equal? word "!import")) 386 (equal? word "!source")) 387 (sourceHeaderComment? word)) 388 (words line)) bytes) 389 sourceModuleHeaderStageWith policy source = 390 y sourceHeader_ source policy t t t t t sourceStart 391 sourceModuleHeaderStage source = 392 sourceModuleHeaderStageWith (spec : ok t t) source 393 sourceModuleStage source = (bindResult (sourceModuleHeaderStage source) 394 (staged _ : ok (snd staged) t)) 395 396 -- Import selections are parsed once by the shared interpreter and by immutable 397 -- pin rewriting. A local name supplies its default qualifier; a hash cannot. 398 sourceModuleUseShape arguments = (bindResult 399 (lazyList 400 (_ : err "!import requires a reference" t) 401 (ref tail : lazyList 402 (_ : lazyBool 403 (_ : err "hash imports require an alias or *" t) 404 (_ : ok (pair ref ref) t) (sourceModuleDigest? ref)) 405 (second more : lazyBool 406 (_ : lazyList (_ : ok (pair ref "*") t) 407 (_ _ : err "unexpected !import arguments" t) more) 408 (_ : lazyBool 409 (_ : lazyList 410 (_ : err "!import requires an alias" t) 411 (alias end : lazyList (_ : ok (pair ref alias) t) 412 (_ _ : err "unexpected !import arguments" t) end) more) 413 (_ : err "expected !import REF [as Alias | *]" t) 414 (equal? second "as")) 415 (equal? second "*")) tail) arguments) 416 (spec _ : lazyBool 417 (_ : ok spec t) 418 (_ : err "invalid import reference or qualifier" t) 419 (and? (sourceHeaderRefValid (fst spec)) 420 (or? (equal? (snd spec) "*") (sourceModuleAliasValid (snd spec)))))) 421 422 sourceModuleExportShape words = 423 lazyList 424 (_ : err "!export requires a name" t) 425 (name rest : lazyList 426 (_ : ok (pair name t) t) 427 (from tail : lazyBool 428 (_ : lazyBool 429 (_ : lazyList 430 (_ : err "missing re-export manifest" t) 431 (hash end : lazyList 432 (_ : ok (pair "from" hash) t) 433 (_ _ : err "unexpected !export arguments" t) 434 end) 435 tail) 436 (_ : err "only !export * from HASH is supported" t) 437 (equal? name "*")) 438 (_ : err "expected !export * from HASH" t) 439 (equal? from "from")) 440 rest) 441 words 442 443 sourceModuleExtendUses_ self pending getManifest root environment = 444 lazyList 445 (_ : pure (ok environment t)) 446 (words rest : lazyResult 447 (problem unused : pure (err problem t)) 448 (spec unused : onResult_ (getManifest (fst spec)) 449 (problem : pure (err problem t)) 450 (entries : sourceModuleExtendOne root entries (snd spec) environment 451 (next : self rest getManifest root next))) 452 (sourceModuleUseShape words)) 453 pending 454 sourceModuleExtendUsesWith getManifest root uses = 455 y sourceModuleExtendUses_ uses getManifest root t 456 sourceModuleExtendUses root uses = 457 sourceModuleExtendUsesWith (sourceModuleGetRefManifest root) root uses 458 459 sourceModuleQualified alias name = 460 lazyBool 461 (_ : name) 462 (_ : append alias (append "." name)) 463 (equal? alias "*") 464 sourceModuleExtendOne_ self entries root alias environment next = 465 lazyList 466 (_ : next environment) 467 (entry rest : 468 lazyMaybe 469 (_ : onResult_ (sourceObjectGetTree root (snd entry)) 470 (problem : pure (err problem t)) 471 (tree : self rest root alias (pair 472 (pair (sourceModuleQualified alias (fst entry)) tree) 473 environment) next)) 474 (_ : pure (err "duplicate imported name" t)) 475 (sourceFindExternal environment 476 (sourceModuleQualified alias (fst entry)))) 477 entries 478 sourceModuleExtendOne root entries alias environment next = 479 y sourceModuleExtendOne_ entries root alias environment next 480 481 sourceModuleExportAll_ self entries root definitions selected = 482 lazyList 483 (_ : pure (ok selected t)) 484 (entry rest : lazyMaybe 485 (_ : onResult_ (sourceObjectPutTree root (snd entry)) 486 (problem : pure (err problem t)) 487 (hash : self rest root definitions 488 (pair (pair (fst entry) hash) selected))) 489 (_ : pure (err "duplicate export" t)) 490 (sourceFindExternal selected (fst entry))) 491 entries 492 sourceModuleExportAll root definitions selected = 493 y sourceModuleExportAll_ definitions root definitions selected 494 495 sourceModuleAddEntries_ self incoming root selected = 496 lazyList 497 (_ : pure (ok selected t)) 498 (entry rest : lazyMaybe 499 (_ : onResult_ (sourceObjectGetTree root (snd entry)) 500 (problem : pure (err problem t)) 501 (_ : self rest root (pair entry selected))) 502 (_ : pure (err "duplicate re-export" t)) 503 (sourceFindExternal selected (fst entry))) 504 incoming 505 sourceModuleAddEntries root incoming selected = 506 y sourceModuleAddEntries_ incoming root selected 507 508 sourceModuleSelect_ self pending getManifest root definitions selected = 509 lazyList 510 (_ : lazyList 511 (_ : pure (err "module requires an export" t)) 512 (_ _ : sourceModulePutManifest root (reverse selected)) 513 selected) 514 (words rest : lazyResult 515 (problem unused : pure (err problem t)) 516 (request unused : lazyBool 517 (_ : onResult_ (getManifest (snd request)) 518 (problem : pure (err problem t)) 519 (entries : onResult_ (sourceModuleAddEntries root entries selected) 520 (problem : pure (err problem t)) 521 (new : self rest getManifest root definitions new))) 522 (_ : lazyBool 523 (_ : onResult_ (sourceModuleExportAll root definitions selected) 524 (problem : pure (err problem t)) 525 (new : self rest getManifest root definitions new)) 526 (_ : lazyMaybe 527 (_ : pure (err "undeclared local export" t)) 528 (tree : lazyMaybe 529 (_ : onResult_ (sourceObjectPutTree root tree) 530 (problem : pure (err problem t)) 531 (hash : self rest getManifest root definitions 532 (pair (pair (fst request) hash) selected))) 533 (_ : pure (err "duplicate export" t)) 534 (sourceFindExternal selected (fst request))) 535 (sourceFindExternal definitions (fst request))) 536 (equal? (fst request) "*")) 537 (equal? (fst request) "from")) 538 (sourceModuleExportShape words)) 539 pending 540 sourceModuleSelectWith getManifest root definitions exports = 541 y sourceModuleSelect_ exports getManifest root definitions t 542 sourceModuleSelect root definitions exports = 543 sourceModuleSelectWith (sourceModuleGetRefManifest root) root definitions exports 544 545 -- End-to-end source entrypoint: stage -> verify/hydrate immutable manifest 546 -- imports -> compile source -> store executable trees -> publish manifest. 547 -- The graph supplies already authenticated, exact-kind/ABI manifest entries. 548 -- Standalone builds still resolve and verify manifests through the ordinary IO 549 -- reader. The resolver never bypasses executable-tree verification. 550 sourceModuleBuildResolvedWith getManifest compileDefinitions root staged = 551 (onResult_ (sourceModuleExtendUsesWith getManifest root (fst staged)) 552 (problem : pure (err problem t)) 553 (environment : lazyResult 554 (problem unused : pure (err problem t)) 555 (definitions unused : sourceModuleSelectWith getManifest root definitions 556 (fst (snd staged))) 557 (compileDefinitions environment (snd (snd staged))))) 558 sourceModuleBuildStagedWith compileDefinitions root staged = 559 sourceModuleBuildResolvedWith (sourceModuleGetRefManifest root) compileDefinitions root staged 560 sourceModuleBuildWith compileDefinitions root source = (lazyResult 561 (problem unused : pure (err problem t)) 562 (staged unused : sourceModuleBuildStagedWith compileDefinitions root staged) 563 (sourceModuleStage source)) 564 565 sourceModuleBuild root source = sourceModuleBuildWith compileModuleDefinitions root source 566 567 568 sourceModuleBuildStaged root staged = 569 sourceModuleBuildStagedWith compileModuleDefinitions root staged