(;module: lux (lux (control monad ["ex" exception #+ exception:]) (data text/format) [meta #+ Monad "Meta/" Monad]) (luxc ["&" base] (lang ["ls" synthesis]) ["&;" analyser] ["&;" synthesizer] (synthesizer [";S" function]) (generator ["&;" common] ["&;" primitive] ["&;" structure] ["&;" eval] ["&;" procedure] ["&;" function] ["&;" reference] [";G" case] (host ["$" jvm])))) (exception: #export Unrecognized-Synthesis) (def: #export (generate synthesis) (-> ls;Synthesis (Meta $;Inst)) (case synthesis #ls;Unit &primitive;generate-unit (^template [ ] ( value) ( value)) ([#ls;Bool &primitive;generate-bool] [#ls;Nat &primitive;generate-nat] [#ls;Int &primitive;generate-int] [#ls;Deg &primitive;generate-deg] [#ls;Frac &primitive;generate-frac] [#ls;Text &primitive;generate-text]) (#ls;Variant tag tail? member) (&structure;generate-variant generate tag tail? member) (#ls;Tuple members) (&structure;generate-tuple generate members) (#ls;Variable var) (if (functionS;captured? var) (&reference;generate-captured var) (&reference;generate-variable var)) (#ls;Definition definition) (&reference;generate-definition definition) (#ls;Let register inputS exprS) (caseG;generate-let generate register inputS exprS) (#ls;Case inputS pathPS) (caseG;generate-case generate inputS pathPS) (#ls;Function arity env body) (&function;generate-function generate env arity body) (#ls;Call args function) (&function;generate-call generate function args) (#ls;Procedure name args) (&procedure;generate-procedure generate name args) _ (&;throw Unrecognized-Synthesis "") ))