I would prefer there be only two asInstanceOfs introduced here, by the (missing afaict) `subst` and `unsubst` equivalent; everything else (including `lossless` and `unwrap`) can be derived from `subst` and `unsubst`.

We lack type roles so can't constrain it better, unfortunately.