Dear Martin, In your example, heading is not of type dir. However, this would work : val mutable heading : dir = `Up Regards, Edouard 2015-09-10 10:07 GMT+01:00 Martin DeMello : > I'm not sure exactly why this doesn't work: > > type dir = [`North | `South | `East | `West | `Up | `Down] > > let index = function > | `North -> 1 > | `South -> 2 > | `East -> 3 > | `West -> 4 > | `Up -> 5 > | `Down -> 6 > > class foo = object(self) > val mutable heading = `Up > > method flip_heading = > heading <- match heading with `Up -> `Down | `Down -> `Up > > method get_direction (x : dir) = index x > > method get_heading = self#get_direction heading > end > > it fails with > File "test.ml", line 28, characters 42-49: > Error: This expression has type [ `Down | `Up ] > but an expression was expected of type dir > The first variant type does not allow tag(s) > `East, `North, `South, `West > > but why is that an error? I'd think that any function that accepts type > dir should accept type [`Down | `Up] as well. Also, how do I get this to > work? > > martin > >