Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang:...
Transcript of Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang:...
![Page 1: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/1.jpg)
Boomerang: ResourcefulLenses for String Data
Aaron Bohannon (Penn)J. Nathan Foster (Penn)
Benjamin C. Pierce (Penn)Alexandre Pilkiewicz (Ecole Polytechnique)
Alan Schmitt (INRIA)
POPL ’08
![Page 2: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/2.jpg)
Bidirectional Mappings
S T
![Page 3: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/3.jpg)
Bidirectional Mappings
S T
UpdatedT
update
![Page 4: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/4.jpg)
Bidirectional Mappings
S T
UpdatedT
UpdatedS
![Page 5: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/5.jpg)
The View Update Problem
This is called the view update problem in the database literature.
Database ViewView definition
Update translation policy
false3z2y true1x true
CBA
100x 1A
falseB C
truey
![Page 6: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/6.jpg)
The View Update Problem In Practice
It also appears in picklers and unpicklers...
Binary File In-memory representation
Updated binary file
application update
![Page 7: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/7.jpg)
The View Update Problem In Practice
...in structure editors...
Document Screen presentation
Updated document
edit operationon screen
XML Editor
XML Editor
![Page 8: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/8.jpg)
The View Update Problem In Practice
...and in data synchronizers like the Harmony system.
source in format B
source in format A Common target format
Synchronized source in format A
Synchronized source in format B
![Page 9: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/9.jpg)
Linguistic Approach
![Page 10: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/10.jpg)
Terminology
lens
![Page 11: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/11.jpg)
Terminology
get
lens
![Page 12: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/12.jpg)
Terminology
get
create
lens
![Page 13: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/13.jpg)
Terminology
get
put
lens
![Page 14: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/14.jpg)
Semantics
A lens l from S to T is a triple of functions
l .get ∈ S → T
l .put ∈ T → S → S
l .create ∈ T → S
obeying three “round-tripping” laws:
l .put (l .get s) s = s (GetPut)
l .get (l .put t s) = t (PutGet)
l .get (l .create t) = t (CreateGet)
![Page 15: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/15.jpg)
This Talk: Lenses for Ordered Data
Data model: Strings
Computation model: Finite-state transducers
Type system: Regular languages
Why strings?
I Simplest form of ordered data.
I There’s a lot of string data in the world.
![Page 16: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/16.jpg)
Contributions
String lenses: interpret finite-state transducers as lenses.
Dictionary lenses: refinement to handle problems with ordereddata.
Boomerang: full-blown programming language built aroundcore combinators.
Applications: lenses for real-world data formats.
![Page 17: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/17.jpg)
Composer Lens (Get)
Source string:
"Benjamin Britten, 1913-1976, English"
Target string:
"Benjamin Britten, English"
Updated target string:
"Benjamin Britten, British"
![Page 18: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/18.jpg)
Composer Lens (Get)
Source string:
"Benjamin Britten, 1913-1976, English"
Target string:
"Benjamin Britten, English"
Updated target string:
"Benjamin Britten, British"
![Page 19: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/19.jpg)
Composer Lens (Put)
Putting new target
"Benjamin Britten, British"
into original source
"Benjamin Britten, 1913-1976, English"
yields new source:
"Benjamin Britten, 1913-1976, British"
![Page 20: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/20.jpg)
Composer Lens (Definition)
let ALPHA : regexp = [A-Za-z ]+let YEAR : regexp = [0-9]{4}let YEARS : regexp = YEAR . "-" . YEAR
let c : lens = cp ALPHA . cp ", ". del YEARS . del ", ". cp ALPHA
Benjamin Britten, 1913-1976, English
!
Benjamin Britten, English
![Page 21: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/21.jpg)
Composers (Get)
Now let us extend the lens to handle ordered lists ofcomposers — i.e., so that
"Aaron Copland, 1910-1990, American
Benjamin Britten, 1913-1976, English"
maps to
"Aaron Copland, American
Benjamin Britten, English"
![Page 22: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/22.jpg)
Composers (Lens)
let ALPHA : regexp = [A-Za-z ]+
let YEAR : regexp = [0-9]4
let YEARS : regexp = YEAR . "-" . YEAR
let c : lens = cp ALPHA . cp ", "
. del YEARS . del ", "
. cp ALPHA
let cs : lens = cp "" | c . (cp "\n" . c)*
![Page 23: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/23.jpg)
Kleene-* and Alignment
Unfortunately, there is a serious problem lurking here.
A put function that works by position does not always give uswhat we want!
![Page 24: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/24.jpg)
A Bad Put
Updating
"Aaron Copland, American
Benjamin Britten, English"
to
"Benjamin Britten, English
Aaron Copland, American"
![Page 25: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/25.jpg)
A Bad Put
... and then putting
"Benjamin Britten, English
Aaron Copland, American"
into the same input as above...
"Aaron Copland, 1910-1990, American
Benjamin Britten, 1913-1976, English"
...yields a mangled result:
"Benjamin Britten, 1910-1990, English
Aaron Copland, 1913-1976, American"
This problem is serious and pervasive.
![Page 26: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/26.jpg)
A Way Forward
In the composers lens, we want the put function to match uplines with identical name components. It should never pass
"Benjamin Britten, English"
and
"Aaron Copland, 1910-1990, American"
to the same put!
To achieve this, the lens needs to identify:
I where are the re-orderable chunks in source and target;
I how to compute a key for each chunk.
![Page 27: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/27.jpg)
A Better Composers Lens
Similar to previous version but with a key annotation and anew combinator (<c>) that identifies the pieces of source andtarget that may be reordered.
let c = key ALPHA . cp ", "
. del YEARS . del ", "
. cp ALPHA
let cs = cp "" | <c> . (cp "\n" . <c>)*
The put function operates on a dictionary structure wheresource chunks are accessed by key.
![Page 28: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/28.jpg)
Boomerang
Boomerang is a simply typed functional language over thebase types string, regexp, lens, ...
String lensprimitives
Simply-typedlambda calculus
Hybrid type checker [Flanagan, Freund et. al].
![Page 29: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/29.jpg)
Demo
![Page 30: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/30.jpg)
Bibliographic Data (BibTeX Source)
@inproceedings{utts07,author = {J. Nathan Foster
and Benjamin C. Pierce
and Alan Schmitt},
title = {A {L}ogic {Y}our {T}ypechecker {C}an {C}ount {O}n:
{U}nordered {T}ree {T}ypes in {P}ractice},
booktitle = {PLAN-X},
year = 2007,
month = jan,
pages = {80--90},
jnf = "yes",
plclub = "yes",
}
![Page 31: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/31.jpg)
Bibliographic Data (RIS Target)
TY - CONF
ID - utts07
AU - Foster, J. Nathan
AU - Pierce, Benjamin C.
AU - Schmitt, Alan
T1 - A Logic Your Typechecker Can Count On:
Unordered Tree Types in Practice
T2 - PLAN-X
PY - 2007/01//
SP - 80
EP - 90
M1 - jnf: yes
M1 - plclub: yes
ER -
![Page 32: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/32.jpg)
Genomic Data (SwissProt Source)
CC -!- INTERACTION: Self;
NbExp=1; IntAct=EBI-1043398, EBI-1043398;
Q8NBH6:-;
NbExp=1;
IntAct=EBI-1043398, EBI-1050185;
P21266:GSTM3;
NbExp=1;
IntAct=EBI-1043398, EBI-350350;
![Page 33: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/33.jpg)
Genomic Data (UniProtKB Target)
<comment type="interaction">
<interactant intactId="EBI-1043398"/>
<interactant intactId="EBI-1043398"/>
<organismsDiffer>false</organismsDiffer>
<experiments>1</experiments>
</comment>
<comment type="interaction">
<interactant intactId="EBI-1043398"/>
<interactant intactId="EBI-1050185">
<id>Q8NBH6</id>
</interactant>
<organismsDiffer>false</organismsDiffer>
<experiments>1</experiments>
</comment>
<comment type="interaction">
<interactant intactId="EBI-1043398"/>
<interactant intactId="EBI-350350">
<id>P21266</id>
<label>GSTM3</label>
</interactant>
<organismsDiffer>false</organismsDiffer>
<experiments>1</experiments>
</comment>
![Page 34: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/34.jpg)
Related Work
Semantic Framework — many related ideas
I [Dayal, Bernstein ’82] “exact translation”
I [Bancilhon, Spryatos ’81] “constant complement”
I [Gottlob, Paolini, Zicari ’88] “dynamic views”
I [Hegner ’03] closed vs. open views.
Bijective languages — many
Bidirectional languages
I [Meertens] — constaint maintainers; similar laws
I [UTokyo PSD Group] — structured document editors
Lens languages
I [POPL ’05, PLAN-X ’07] — trees
I [Bohannon et al PODS ’06] — relations
See our TOPLAS paper for details...
![Page 35: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/35.jpg)
Extensions and Future work
Primitives:
I composition
I permuting
I filtering
Semantic Foundations:
I quasi-oblivious lenses
I quotient lenses
Optimization:
I algebraic theory
I efficient automata
I streaming lenses
Keys: matching based on similiarity metrics.
![Page 36: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/36.jpg)
Thank You!
Want to play? Boomerang is available for download:
I Source code (LGPL)
I Binaries for Windows, OS X, Linux
I Research papers
I Tutorial and growing collection of demos
http://www.seas.upenn.edu/∼harmony/
![Page 37: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/37.jpg)
Extra Slides
![Page 38: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/38.jpg)
Quasi-Obliviousness
We want a property to distinguish the behavior of the firstcomposers lens from the version with chunks and keys.
Intuition: the put function is agnostic to the order of chunkshaving different keys.
Let ∼ ⊆ S × S be the equivalence relation that identifiessources up to key-respecting reorderings of chunks.
The dictionary composers lens obeys
s ∼ s ′
l .put t s = l .put t s ′(EquivPut)
but the basic lens does not.
![Page 39: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/39.jpg)
Quasi-Obliviousness
More generally we can let ∼ be an arbitrary equivalences on S .
The EquivPut law characterizes some important specialcases of lenses:
I Every lens is quasi-oblivious wrt the identity relation.
I Bijective lenses are quasi-oblivious wrt the total relation.
I For experts: Recall the PutPut law:
put(t2, put(t1, s)) = put(t2, s)
which captures the notion of “constant complement”from databases. A lens obeys this law iff each equivalenceclasses of the coarsest ∼ maps via get to T .
![Page 40: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/40.jpg)
Copy and Delete
cp E ∈ [[E ]] ⇐⇒ [[E ]]
get s = s
put t s = t
create t = t
[[E ]] 6= ∅del E ∈ [[E ]] ⇐⇒ {ε}
get s = ε
put ε s = s
create ε = choose(E )
![Page 41: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/41.jpg)
Concatenation
S1 ·! S2 T1 ·! T2
l1 ∈ S1 ⇐⇒ T1 l2 ∈ S2 ⇐⇒ T2
l1 · l2 ∈ S1 · S2 ⇐⇒ T1 · T2
get (s1 · s2) = (l1.get s1) · (l2.get s2)
put (t1 · t2) (s1 · s2) = (l1.put t1 s1) · (l2.put t2 s2)
create (t1 · t2) = (l1.create t1) · (l2.create t2)
S1 ·! S2 means “the concatenation of S1 and S2 is uniquely
splittable”
![Page 42: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/42.jpg)
Kleene-*
l ∈ S ⇐⇒ T S !∗ T !∗l∗ ∈ S∗ ⇐⇒ T∗
get (s1 · · · sn) = (l .get s1) · · · (l .get sn)
put (t1 · · · tn) (s1 · · · sm) = (l .put t1 s1) · · · (l .put tm sm) ·(l .create tm+1) · · · (l .create tn)
create (t1 · · · tn) = (l .create t1) · · · (l .create tn)
![Page 43: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/43.jpg)
Union
S1 ∩ S2 = ∅ l1 ∈ S1 ⇐⇒ T1 l2 ∈ S2 ⇐⇒ T2
l1 | l2 ∈ S1 ∪ S2 ⇐⇒ T1 ∪ T2
get s =
{l1.get s if s ∈ S1
l2.get s if s ∈ S2
put t s =
{li .put t s if s ∈ Si ∧ t ∈ Ti
lj .create t if s ∈ Si ∧ t ∈ Tj \ Ti
create a =
{l1.create t if t ∈ T1
l2.create t if t ∈ T2 \ T1
![Page 44: Boomerang: Resourceful Lenses for String Datajnfoster/papers/boomerang-slides.pdf · Boomerang: Resourceful Lenses for String Data Aaron Bohannon (Penn) J. Nathan Foster (Penn) Benjamin](https://reader036.fdocuments.net/reader036/viewer/2022081801/6011e9a630655c0214246f87/html5/thumbnails/44.jpg)
The Essential Dictionary Lens
l ∈ SR,D⇐⇒ T
<l> ∈ S{�},D′⇐⇒ T
<l>.get s = l .get s
<l>.put t (�, d) = π1(l .put t (r , d ′′)), d ′
where (r , d ′′), d ′ = lookup (l .key t) d
<l>.parse s = �, {(l .key (l .get s)) 7→ [s]}