diff options
| author | Brian Campbell | 2017-08-14 17:28:41 +0100 |
|---|---|---|
| committer | Brian Campbell | 2017-08-14 17:28:41 +0100 |
| commit | 637ed6dcd3831fb831ab30f7ed1dc00226a8fa7c (patch) | |
| tree | 4e757be417aecdd496eb863416c289112247d319 /src | |
| parent | 404eef7b9a446f8b1da2024cbf722911958d9f52 (diff) | |
Existentials in free type var functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/spec_analysis.ml | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/spec_analysis.ml b/src/spec_analysis.ml index 1475da7a..5281ef27 100644 --- a/src/spec_analysis.ml +++ b/src/spec_analysis.ml @@ -211,6 +211,7 @@ let rec free_type_names_t consider_var (Typ_aux (t, _)) = match t with | Typ_tup ts -> free_type_names_ts consider_var ts | Typ_app (name,targs) -> Nameset.add (string_of_id name) (free_type_names_t_args consider_var targs) | Typ_wild -> mt + | Typ_exist (kids,_,t') -> List.fold_left (fun s kid -> Nameset.remove (string_of_kid kid) s) (free_type_names_t consider_var t') kids and free_type_names_ts consider_var ts = nameset_bigunion (List.map (free_type_names_t consider_var) ts) and free_type_names_maybe_t consider_var = function | Some t -> free_type_names_t consider_var t @@ -239,6 +240,7 @@ let rec fv_of_typ consider_var bound used (Typ_aux (t,_)) : Nameset.t = | Typ_tup ts -> List.fold_right (fun t n -> fv_of_typ consider_var bound n t) ts used | Typ_app(id,targs) -> List.fold_right (fun ta n -> fv_of_targ consider_var bound n ta) targs (conditional_add_typ bound used id) + | Typ_exist (kids,_,t') -> fv_of_typ consider_var (List.fold_left (fun b (Kid_aux (Var v,_)) -> Nameset.add v b) bound kids) used t' and fv_of_targ consider_var bound used (Ast.Typ_arg_aux(targ,_)) : Nameset.t = match targ with | Typ_arg_typ t -> fv_of_typ consider_var bound used t |
