//! A mutable reference type
let reference @ { Reference } = import! std.reference.prim
let { flat_map } = import! std.monad
let { IO, ? } = import! std.io.base
#[infix(right, 9)]
let (<-) = reference.(<-)
let modify r f : Reference a -> (a -> a) -> IO () =
do x = reference.load r
r <- f x
{
Reference,
(<-),
modify,
..
reference
}