type K = enum
ka,kb
type A = object
case kind: K
of ka: adata:int
of kb: bdata:string
proc a():A = A(kind:ka)
var an = a()
proc `adata=`[T](m:var A, val:T) =
if m.kind != ka:
m.reset
m.kind = ka
m.adata = val
proc `bdata=`[T](m:var A, val:T) =
if m.kind != kb:
m.reset
m.kind = kb
m.bdata = val
an.adata = 5
echo an.kind, an.adata
an.adata = 6
echo an.kind, an.adata
an.bdata = "hello"
echo an.kind, an.bdata