op_type is not necessary because the field name is specified at "case":
type
OpType = enum
setOp, setBinaryOp, intOp, intBinaryOp, intToSetOp, setToIntOp
Node = ref NodeObj
NodeObj = object
case kind: OpType
of setOp:
op: proc(R: IntSet): IntSet
of setBinaryOp:
op: proc(R: IntSet, S: IntSet): IntSet
the name of the 'kind' field can be anything