#[allow(unused_imports)]
use monadic::{rdrt_mdo, monad::{Monad},
reader_trans::{ReaderT, ask, local}};
use num::Integer;
use partial_application::partial;
use std::collections::HashMap;
type Env = HashMap<String, i32>;
fn immutable_insert( k_slice: &str, v: i32, dict: Env) -> Env {
let mut dict1 = dict.clone();
dict1.insert( String::from(k_slice), v);
dict1
}
fn my_initial_env() -> Env {
immutable_insert( "a", 1, HashMap::new())
}
fn main() {
let modify_env = partial!(immutable_insert => "b", 2, _);
let bloc = rdrt_mdo!{
env1 <- ask();
pair <- local( modify_env, rdrt_mdo!{
x <- lift_iter 5..9;
guard x.is_odd();
let z = x + 1;
y <- ask();
pure (z, y) }) ;
pure (env1.clone(), pair.0, pair.1)
};
let res = bloc.initial_env( my_initial_env() );
println!("result: {:?}", res);
}