pub fn get() -> Eval(a, b, a)
pub fn modify(f: fn(a) -> a) -> Eval(Nil, b, a)
pub fn set(ctx: a) -> Eval(Nil, b, a)
pub fn update(eval: Eval(a, b, c), f: fn(c, a) -> c) -> Eval( a, b, c, )