use state_macro::stateful_expr;
use std::cell::RefCell;
use std::rc::Rc;
type State = Rc<RefCell<u8>>;
fn inc(state: State) -> u8 {
let mut i = state.borrow_mut();
*i += 1;
*i
}
#[stateful_expr(State, state.clone())]
fn inc_twice() -> u8 {
::inc() + ::inc()
}
fn main() {
let state = Rc::new(RefCell::new(0u8));
let result = inc_twice(state);
println!("{}", result);
assert_eq!(result, 3);
}