diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1996-11-13 15:32:07 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1996-11-13 15:32:07 +0000 |
commit | c226d38b4f19312510bc309dd84d72befd6833d2 (patch) | |
tree | 00b9003b5b6e5305b4d253c92b82ec8b3ac9d4b8 | |
parent | 1c3d3b17d20f607828a9eed6d837c394b6b6e6ae (diff) |
Dans les declarations de la forme
type t = t' = A of ... | B of ...
substituer t par t' dans les ... afin de comparer correctement les
definitions de t et t' meme si elles sont recursives.
Aussi: meilleure verification que t et t' ont les memes parametres.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1191 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | typing/typedecl.ml | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/typing/typedecl.ml b/typing/typedecl.ml index 00a05c421..205dab3ba 100644 --- a/typing/typedecl.ml +++ b/typing/typedecl.ml @@ -125,7 +125,13 @@ let transl_declaration env (name, sdecl) id = Tconstr(path, args, _) -> begin try let decl' = Env.find_type path env in - if args = params & Includecore.type_declarations env id decl decl' + if List.length args = List.length params + && List.for_all2 (fun v1 v2 -> Ctype.repr v1 == Ctype.repr v2) + args params + && Includecore.type_declarations env id + (Subst.type_declaration (Subst.add_type id path Subst.identity) + decl) + decl' then () else raise(Error(sdecl.ptype_loc, Definition_mismatch ty)) with Not_found -> |