type Holder {
    value: ref<i32>,
}

fn replaceValue(holder: mutref<Holder>, next: ref<i32>) -> Bool {
    holder.value = next
    return true
}

fn maybeReplace(flag: Bool, holder: mutref<Holder>, next: ref<i32>) -> Void {
    let ok: Bool = flag && replaceValue(holder, next)
}

pub fn main(flag: Bool) -> Void {
    var old: i32 = 1
    let next: i32 = 2
    var holder: Holder = Holder { value: &old }
    maybeReplace(flag, &mut holder, &next)
    old = 3
}
