(.module: lux (luxc (lang ["la" analysis] ["ls" synthesis] [".L" variable #+ Variable]))) (do-template [ ] [(def: #export ( arity) (-> ls.Arity Bool) ( arity))] [nested? n/> +1] [top? n/= +0] ) (def: #export (adjust-var outer var) (-> ls.Arity Variable Variable) (|> outer n/dec nat-to-int (i/+ var))) (def: #export (unfold-apply apply) (-> la.Analysis [la.Analysis (List la.Analysis)]) (loop [apply apply args (list)] (case apply (^code ("lux apply" (~ arg) (~ func))) (recur func (#.Cons arg args)) _ [apply args])))