I wonder whether this error is an example of the language being defined more restrictively than required. What is the reason that I get these results? type a = int -> one -> int and one = Unused | One of a;; type b = int -> b -> int type a is accepted while type b is not. (b gives "The type abbreviation b is cyclic" However, in the uses that I intended, there won't be any actual difference between the two. I'd appreciate an explanation about why there is difference between a and b. Thanks Bill Smith