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