Lenses

A Lens<S, A> is a total optic: every S has exactly one focused A.

#![allow(unused)]
fn main() {
use id_effect_optics::{Lens, field};

#[derive(Clone)]
struct Person { name: String }

let name = field(
    |p: &Person| &p.name,
    |mut p, name| { p.name = name; p },
);

let updated = name.modify(Person { name: "ada".into() }, |n| n.to_uppercase());
}

Compose nested lenses with Lens::compose.

Stub: derive-generated field lenses land in Plan 04 (FP DX).