(.module: [lux (#- Module) [data [text format] [collection ["." list ("#;." monoid)]]]] [// [meta [archive [descriptor (#+ Module)]]] ["." analysis] ["." synthesis] ["." phase ["." generation] ["." extension]]]) (type: #export (Component state phase) {#state state #phase phase}) (type: #export (State anchor expression statement) {#analysis (Component analysis.State+ analysis.Phase) #synthesis (Component synthesis.State+ synthesis.Phase) #generation (Component (generation.State+ anchor expression statement) (generation.Phase anchor expression statement))}) (type: #export Import {#module Module #alias Text}) (type: #export Requirements {#imports (List Import) #referrals (List Code)}) (def: #export no-requirements Requirements {#imports (list) #referrals (list)}) (def: #export (merge-requirements left right) (-> Requirements Requirements Requirements) {#imports (list;compose (get@ #imports left) (get@ #imports right)) #referrals (list;compose (get@ #referrals left) (get@ #referrals right))}) (template [ ] [(type: #export ( anchor expression statement) ( (..State anchor expression statement) Code Requirements))] [State+ extension.State] [Operation extension.Operation] [Phase extension.Phase] [Handler extension.Handler] [Bundle extension.Bundle] ) (template [ ] [(def: #export ( operation) (All [anchor expression statement output] (-> ( output) (Operation anchor expression statement output))) (extension.lift (phase.sub [(get@ [ #..state]) (set@ [ #..state])] operation)))] [lift-analysis #..analysis analysis.Operation] [lift-synthesis #..synthesis synthesis.Operation] [lift-generation #..generation (generation.Operation anchor expression statement)] )