, extract, create. $0 $1 - . $0.name_, $0 create B, Address, name_ Person. , :
let lens : Lens<Person, Address> = Lens(
extract: { $0.address_ },
create: { Person(name_: $1.name_, address_: Address(street_: $0.street_, city_: $1.address_.city_)) }
)
Lens:
struct Lens<A, B> {
let extract: (A) -> B
let create: (A, B) -> A // note, A & B swapped
}
:
let lens : Lens<Person, Address> = Lens(
extract: { $0.address_ },
create: { Person(name_: $0.name_, address_: Address(street_: $1.street_, city_: $0.address_.city_)) }
)
, , :
let lens : Lens<Person, Address> = Lens(
extract: { $0.address_ },
create: { Person(name_: $0.name_, address_: $1) }
)
, create , . ( , .)