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