effectful 0.3.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 032 — `ServiceContext` is the v1 service environment.
use effectful::{ContextService, Effect, MissingService, Service, ServiceContext, run_blocking};

#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, Service)]
struct Token {
  value: &'static str,
}

fn main() {
  let env = Token { value: "secret" }.to_context();
  assert_eq!(env.get::<Token>().map(|token| token.value), Some("secret"));

  let program: Effect<&'static str, MissingService, ServiceContext> =
    Token::use_sync(|token| token.value);
  assert_eq!(run_blocking(program, env), Ok("secret"));
  println!("032_service_env ok");
}