| n when n > 0 -> `Lam (false, lift 1 (make_lams t (n-1)))
| _ -> assert false
-let free_vars =
+let free_vars' =
let rec aux n = function
`N _ -> []
- | `Var(x,_) -> if x < n then [] else [x-n]
- | `I((x,_),args) ->
- (if x < n then [] else [x-n]) @
+ | `Var(x,ar) -> if x < n then [] else [(x-n,ar)]
+ | `I((x,ar),args) ->
+ (if x < n then [] else [(x-n,ar)]) @
List.concat (List.map (aux n) (Listx.to_list args))
| `Lam(_,t) -> aux (n+1) t
| `Match(t,_,liftno,bs,args) ->
List.concat (List.map (aux n) args)
in aux 0
;;
+let free_vars = (List.map fst) ++ free_vars';;
module ToScott =
struct