packages.tri (1720B)
1 !import prelude * 2 !import consumers_structural as S 3 !import consumers_lexical_worker as L 4 !import consumers_effect as Registry 5 !import consumers_effect_compose as E 6 !export * 7 -- Authoring constructs owner-local tables from declared receiver names. 8 -- Compiled rows also supply pure workers independently of effect ownership. 9 10 ownedRows_ self names rows = (triage (ok t t) 11 (_ : err "improper receiver ownership declaration" t) 12 (name rest : lazyMaybe 13 (_ : err (pair "unknown owned receiver" name) t) 14 (value : bindResult (self rest rows) (selected _ : 15 ok (pair (pair name value) selected) t)) 16 (Registry.lookup rows name)) names) 17 ownedRows names rows = y ownedRows_ names rows 18 referenceReceivers rows = map (row : pair (fst row) (fst (snd (snd row)))) rows 19 lexicalReceivers rows = map (row : pair (fst row) 20 (S.makeConsumer t (L.lWorker t (fst (snd row))))) rows 21 referencePackage rows entry names helpers = (bindResult (ownedRows names rows) 22 (selected _ : E.makePackage entry (referenceReceivers selected) helpers)) 23 preparedPackage rows entry names helpers = (bindResult (ownedRows names rows) 24 (selected _ : bindResult (L.lPrepareEffectReceivers (lexicalReceivers selected)) 25 (receivers _ : E.makePackage entry receivers helpers))) 26 -- The default library runner pairs prepared packages with prepared invocation. 27 run operations scope input state = E.run L.lPreparedEffectStep operations scope input state 28 runWithFault faultK operations scope input state = 29 E.runWithFault faultK L.lPreparedEffectStep operations scope input state 30 worker rows name = (lazyMaybe 31 (_ : err (pair "unknown configured worker" name) t) 32 (compiled : ok (L.lWorker t (fst compiled)) t) 33 (Registry.lookup rows name))