struct KarmicVar<'a, T, U> {
app: fn(&'a mut T) -> U
}
type Karma<T> = KarmicVar<'static, unit, T>
impl KarmicVar<'a, T, U> {
fn pure(value: U) -> Self {
KarmicVar {app: |_: &'a mut T| value}
}
fn bind<V>(&self, action: fn (U) -> KarmicVar<'a, T, V>) -> KarmicVar<'a, T, V> {
KarmicVar {app: |karmic_ref: &'a mut T| action(self.app(karmic_ref))}
}
}