I think, in general, I need 2 types. I am not sure these are good names.
let (a,b):('a Undefined<i64>, 'b Uninit<i64>)=get_uninit<i64>();
//creates 2 lifetimes, and 2 types.
set(b,5); //consumes b. This ends the lifetime 'b
let c:i64=a.is_init(); //function is only valid once lifetime of 'b has ended.
// this consumes a.
//The only variable now in scope is c, which equals 5.