id_effect 0.4.0

Effect<A, E, R> (sync + async), capability DI, pipe — interpreter-style, no bundled executor
Documentation
# Traversals and schema bridge

## Traversals

[`Traversal`](../../../../id_effect_optics/src/traversal.rs) maps over **zero or many** inner values:

```rust
use id_effect_optics::{vector_each, at_vec, at_option, field};

let doubled = vector_each::<i32>().over(vec![1, 2, 3], |n| n * 2);
```

Compose a field lens with collection traversals via [`at_vec`](../../../../id_effect_optics/src/traversal.rs) and [`at_option`](../../../../id_effect_optics/src/traversal.rs).

## Schema field paths

[`get_at_path`](../../../../id_effect_optics/src/schema_bridge.rs), [`set_at_path`](../../../../id_effect_optics/src/schema_bridge.rs), and [`create_at_path`](../../../../id_effect_optics/src/schema_bridge.rs) navigate [`Unknown`](../../src/schema/parse.rs) with dot-separated segments (`user.name`, `tags.0`) or JSON Pointer paths (`/user/name/0`).

## JSON Patch

[`apply_patch`](../../../../id_effect_optics/src/json_patch.rs) supports `add`, `replace`, `remove`, `move`, `copy`, and `test`.

## Trie zipper

[`TrieZipper`](../../../../id_effect_optics/src/zipper.rs) navigates persistent tries, supports `rebuild`, `insert_child`, and `remove_child`.