id_effect 0.2.0

Effect<A, E, R> (sync + async), context/layers, pipe — interpreter-style, no bundled executor
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//! Ex 090 — `acquire_release` runs cleanup after the body completes.
use id_effect::{acquire_release, run_blocking, succeed};

fn main() {
  let log = std::sync::Arc::new(std::sync::Mutex::new(Vec::new()));
  let log2 = std::sync::Arc::clone(&log);
  let eff = acquire_release(succeed::<u8, &'static str, ()>(9), move |n| {
    let log2 = std::sync::Arc::clone(&log2);
    id_effect::Effect::new(move |_env: &mut ()| {
      log2.lock().unwrap().push(n);
      Ok::<(), ()>(())
    })
  });
  assert_eq!(run_blocking(eff, ()), Ok(9));
  assert_eq!(*log.lock().unwrap(), vec![9]);
  println!("090_acquire_release ok");
}