summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-11-15 17:25:58 +0000
committerAlasdair Armstrong2017-11-15 17:25:58 +0000
commitff68c0250d43869f8cc62b79ebc9930f27158bee (patch)
tree88ef2e95d29cc50456c7a4110cc6eee179d3c87d /src
parent599930a7256340c9ecb6d872c82a487149ee551e (diff)
Fix rule for allowing atom to unify with range
Diffstat (limited to 'src')
-rw-r--r--src/type_check.ml5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/type_check.ml b/src/type_check.ml
index f71e52c1..c0cd1161 100644
--- a/src/type_check.ml
+++ b/src/type_check.ml
@@ -1496,6 +1496,11 @@ let rec unify l env typ1 typ2 =
| Invalid_argument _ -> unify_error l (string_of_typ typ1 ^ " cannot be unified with " ^ string_of_typ typ2
^ " tuple type is of different length")
end
+ | Typ_app (f1, [arg1]), Typ_app (f2, [Typ_arg_aux (Typ_arg_nexp n1, _) as arg2a; Typ_arg_aux (Typ_arg_nexp n2, _)])
+ when Id.compare (mk_id "atom") f1 = 0 && Id.compare (mk_id "range") f2 = 0 ->
+ if prove env (nc_eq n1 n2)
+ then unify_typ_arg_list 0 KBindings.empty [] [] [arg1] [arg2a]
+ else typ_error l ("Cannot unify atom with range when range indices " ^ string_of_nexp n1 ^ " and " ^ string_of_nexp n2 ^ " are not equal")
| Typ_app (f1, [arg1a; arg1b]), Typ_app (f2, [arg2])
when Id.compare (mk_id "range") f1 = 0 && Id.compare (mk_id "atom") f2 = 0 ->
unify_typ_arg_list 0 KBindings.empty [] [] [arg1a; arg1b] [arg2; arg2]