(;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])))