open Vector datatype t = T of t vector fun makeT() = T(tabulate(0, fn _ => makeT())) fun destT(T v) = if length v > 0 then 1 + destT(sub(v, 0)) else 0 val _ = if 0 = destT(makeT()) then () else raise Fail "bug"