<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<div class="ContentPasted1 ContentPasted2" style="font-size:12pt;margin:0px">I tried to understand the GathererOp class and came over a small detail concering Gatherer.Integrator.</div>
<div class="ContentPasted1 ContentPasted2" style="font-size:12pt;margin:0px"><br>
</div>
<div class="ContentPasted1 ContentPasted2" style="font-size:12pt;margin:0px">The two gatheres below are equivalent, both are greedy.</div>
<div class="ContentPasted0" style="font-size:12pt;margin:0px"><br>
</div>
</span></div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Gatherer.Integrator.Greedy<Void, String, Integer> voidStringIntegerGreedy = (v, s, downStream) -> downStream.push(s.length());</span><br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> var greedy1 = Gatherer.of(Gatherer.Integrator.ofGreedy(voidStringIntegerGreedy));</div>
var greedy2 = Gatherer.of(Gatherer.Integrator.of(voidStringIntegerGreedy));<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
Inlining the lambda makes them different.</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<div class="ContentPasted0 ContentPasted4" style="font-size:12pt;margin:0px">
<div class="ContentPasted0 ContentPasted4" style="margin:0px"> var greedy = Gatherer.of(Gatherer.Integrator.ofGreedy(<span style="display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted5">(v, s, downStream) -> downStream.push(s.length())</span>));</div>
var nonGreedy = Gatherer.of(Gatherer.Integrator.of(<span style="display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted6">(v, s, downStream) -> downStream.push(s.length())</span>));<br class="ContentPasted4">
</div>
<div class="ContentPasted0" style="font-size:12pt;margin:0px"><br style="font-size: 16px; background-color: rgb(255, 255, 255);" class="ContentPasted4">
</div>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
If this can be a problem a<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">n introduction of an Integrator subtype like NonGreedy would have given a compiler error
on the "var greedy2 =" line instead.</span></div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">interface Integrator {</span><br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0 ContentPasted3">
<div><span style=""> .....</span><br>
</div>
<div class="ContentPasted3"> static <A, T, R> NonGreedy<A, T, R> of(NonGreedy<A, T, R> integrator) {</div>
<div class="ContentPasted3"> return integrator;</div>
<div class="ContentPasted3"> }</div>
<div><br class="ContentPasted3">
</div>
<div class="ContentPasted3"> static <A, T, R> Greedy<A, T, R> ofGreedy(Greedy<A, T, R> greedy) {</div>
<div class="ContentPasted3"> return greedy;</div>
<div class="ContentPasted3"> }</div>
<div><br class="ContentPasted3">
</div>
<div class="ContentPasted3"> interface Greedy<A, T, R> extends Integrator<A, T, R> { }</div>
<div class="ContentPasted3"> interface NonGreedy<A, T, R> extends Integrator<A, T, R> { }</div>
<div class="ContentPasted3"> </div>
<div class="ContentPasted3">}</div>
<div class="ContentPasted3"> </div>
<div>Svein Otto Solem</div>
<div>Retired programmer</div>
<div>Kantega</div>
<div><br>
</div>
<div><br class="ContentPasted3">
</div>
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<div style="font-size:12pt;margin:0px" class="ContentPasted1"><br>
</div>
<div style="font-size:12pt;margin:0px" class="ContentPasted1"><br>
</div>
</div>
</body>
</html>