[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2004-12-07 (02:26) |
From: | Aaron Bohannon <bohannon@c...> |
Subject: | exceptions in recursive modules |
I was trying to use a recursive module but was getting unexpected "Undefined_recursive_modules" exceptions. After a long debugging session, I discovered the source of my problem to be exception declarations in the module. I don't intuitively understand why they cause a problem, and as I cannot find documentation of the behavior, I am wondering if it might be a bug. Here is the example. This is essentially the example in the manual, but I have added an exception to the module: module rec A : sig type t = Leaf of int | Node of ASet.t exception Fail val compare : t -> t -> int end = struct type t = Leaf of int | Node of ASet.t exception Fail let rec compare = (* suitable definition *) end and ASet : Set.S with type elt = A.t = Set.Make(A) Then we can try to use it: # let x = A.Leaf(3);; val x : A.t = A.Leaf 3 # let s = ASet.add x ASet.empty;; val s : ASet.t = <abstr> # let s' = ASet.add x s;; Exception: Undefined_recursive_module ("recmodtest.ml", 6, 6). If we remove the "exception Fail" from the signature, everything works just fine. Is this behavior correct? (I am using OCaml 3.08.1) Aaron -- Aaron Bohannon http://www.cis.upenn.edu/~bohannon/