April 2017
Intermediate to advanced
316 pages
9h 33m
English
Lens composition will help to simplify our lens; let's examine how:
infix operator >>> : AssociativityRight func >>><A, B, C>(l: Lens<A,B>, r: Lens<B, C>) -> Lens<A, C> { return Lens(get: { r.get(l.get($0)) }, set: { (c, a) in l.set(r.set(c, l.get(a)), a) }) }
Let's test this:
let prodProducerAddress = prodProducerLens >>> producerAddressLens let mexBananaProducerAddress = prodProducerAddress.get(mexBananas3) let newProducer = prodProducerAddress.set("Acupulco, Mexico", mexBananas2) print(newProducer)
The result is going to be as follows:
FunctionalProduct(name: "Banana", price: 0.79, quantity: 2, producer: Producer(name: "QAZ", address: "Acupulco, Mexico"))
Using lenses and composition, we were able to ...
Read now
Unlock full access