func condense[T](e: Experiment[T, sGas]): var Experiment[T, sLiquid] =
cast[ptr Experiment[T, sLiquid]](e.addr)[]
RunShouldn't the `e` is `var Experiment[T, sGas]` ? Is that typo or intended? If it's intended, based on the usage, this shouldn't compile though because the `e` is not addressable.
