tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

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))