Right now they're all like OCaml polymorphic variants. There are no static types. That's a future thing we'd like to add to the interpreter/compiler
Your example is legal (modulo the constraint that every tag must have an associated value) and works because we store the tag either in the pointer or the tag field.