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