Example

state_effect.kina

Source

let f = fn(x : tensor<F32, []>) !{State} -> tensor<F32, []> {
    let current = perform State.get() in
    let new_val = current + x in
    let dummy = perform State.set(new_val) in
    new_val
} in
let initial_val = tensor<F32, []> { 1.0 } in
let handled = handle f(initial_val) with {
    return(ret_val) => ret_val,
    State.get(), k => k(tensor<F32, []> { 0.0 }),
    State.set(v), k => k(v)
} in
handled