Hi Ivan, You may use parameterized classes like this : type odds = [`One | `Three ] type evens = [`Two | `Four ] type numbers = [ odds | evens ] class type ['a] number = object constraint 'a = [< numbers] method category: 'a end class type ['a] odd = object inherit ['a] number constraint 'a = odds method category: 'a end class type ['a] even = object inherit ['a] number constraint 'a = evens method category: 'a end This passes the compilation. didier 2012/10/25 Ivan Gotovchits > > Here a simple example that illustrates the problem: > > type odds = [`One | `Three ] > type evens = [`Two | `Four ] > type numbers = [ odds | evens ] > > class type number = object > method category: numbers > end > > class type odd = object > inherit number > method category: odds > end > > > class type even = object > inherit number > method category: evens > end > > > > It fails to compile, stating the following error: > The method category has type odds but is expected to have type > numbers > Type odds = [ `One | `Three ] is not compatible with type > numbers = [ `Four | `One | `Three | `Two ] > The first variant type does not allow tag(s) `Four, `Two > > Just by theory, odds are covariant to numbers, so this kind of subtyping > can be done. Is it possible to persuade compiler? > > -- > (__) > (oo) > /------\/ > / | || > * /\---/\ > ~~ ~~ > ...."Have you mooed today?"... > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >