<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>Bidirectional Transformations - new forum posts</title>
		<link>http://bx-community.wikidot.com/forum/start</link>
		<description>Posts in forums of the site &quot;Bidirectional Transformations&quot;</description>
				<copyright></copyright>
		<lastBuildDate>Sat, 18 Jul 2026 02:36:15 +0000</lastBuildDate>
		
					<item>
				<guid>http://bx-community.wikidot.com/forum/t-13231986#post-4711720</guid>
				<title>Re: Installing Boomerang in 2020</title>
				<link>http://bx-community.wikidot.com/forum/t-13231986/installing-boomerang-in-2020#post-4711720</link>
				<description></description>
				<pubDate>Tue, 07 Jul 2020 00:31:43 +0000</pubDate>
				<wikidot:authorName>J Jakes-Schauer</wikidot:authorName>				<wikidot:authorUserId>5626811</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I'll offer a partial response to my own post, having successfully gotten Boomerang going, with some work. I used an old version of OCaml:</p> <div class="code"> <pre><code>opam switch create 4.04.2</code></pre></div> <br /> I also rolled back Boomerang to before it used <tt>jbuilder</tt>: <div class="code"> <pre><code>git checkout e64f97b</code></pre></div> <p>Made sure I had OASIS, and ran <tt>make</tt> to completion.</p> <br/>Forum category: <a href="http://bx-community.wikidot.com/forum/c-6497891">General Discussion on Bx Languages and Tools / Default Category</a><br/>Forum thread: <a href="http://bx-community.wikidot.com/forum/t-13231986/installing-boomerang-in-2020">Installing Boomerang in 2020</a>
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://bx-community.wikidot.com/forum/t-13231986#post-4591962</guid>
				<title>Installing Boomerang in 2020</title>
				<link>http://bx-community.wikidot.com/forum/t-13231986/installing-boomerang-in-2020#post-4591962</link>
				<description></description>
				<pubDate>Sat, 11 Apr 2020 20:23:54 +0000</pubDate>
				<wikidot:authorName>J Jakes-Schauer</wikidot:authorName>				<wikidot:authorUserId>5626811</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Is the Boomerang language still being maintained? The GitHub repo [link redacted] hasn't been updated in about two years, and I think it's missing some stuff&#8212;notably the 'INSTALL.txt' instructions mentioned in the documentation.</p> <p>OCaml isn't a language I've much studied. After installing it (v4.05) and some other prerequisites, such as <tt>jbuilder</tt>, I am able to run <tt>make</tt>, whereupon the following error presents itself:</p> <div class="code"> <pre><code>File &quot;stdlib/util.ml&quot;, line 684, characters 9-37: Error: The function applied to this argument has type compare:('a -&gt; 'a -&gt; int) -&gt; 'a list This argument cannot be applied with label ~cmp</code></pre></div> <br/>Forum category: <a href="http://bx-community.wikidot.com/forum/c-6497891">General Discussion on Bx Languages and Tools / Default Category</a><br/>Forum thread: <a href="http://bx-community.wikidot.com/forum/t-13231986/installing-boomerang-in-2020">Installing Boomerang in 2020</a>
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://bx-community.wikidot.com/forum/t-12494314#post-4372661</guid>
				<title>Re: Beginner&#039;s question: additive &quot;information content&quot; of lenses</title>
				<link>http://bx-community.wikidot.com/forum/t-12494314/beginner-s-question:additive-information-content-of-lenses#post-4372661</link>
				<description></description>
				<pubDate>Mon, 23 Sep 2019 03:18:38 +0000</pubDate>
				<wikidot:authorName>J Jakes-Schauer</wikidot:authorName>				<wikidot:authorUserId>5626811</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I apologize for the long delay. It's typical, I'm afraid.</p> <blockquote> <p>I'm not sure what you mean by reversible, or inversion.</p> </blockquote> <p>I say 'invertible' when talking about things that seem more like mathematical functions, and 'reversible' when describing programs or algorithms, in the 'reversible computing' (q.v.) sense. In the considerable area where they overlap, I tend to use them interchangeably, which may be the source of the confusion.</p> <blockquote> <p>I'm not from the PL/Haskell world but can still suggest <a href="javascript:;" class="bibcite" id="bibcite-696244-1-76248a" >1</a> for a formal overview of the quite diverse &quot;lens landscape&quot;. It might help you identify what you're interested in and provide relevant references and pointers for further reading.</p> </blockquote> <p>It did. Johnson and Rosebrugh have another paper, <a href="javascript:;" class="bibcite" id="bibcite-696244-2-90622a" >2</a>, about <em>spans</em>, which helped me to a breakthrough. I think what I was grasping at, in my first post, was that <tt>head</tt> and <tt>tail</tt> are 'complementary,' and the combined form <span class="math-inline">$(\mathtt{lhead}\times \mathtt{ltail})$</span> is a 'span' from <tt>head</tt> to <tt>tail</tt>.</p> <p>The most illuminating paper I've encountered has been <a href="javascript:;" class="bibcite" id="bibcite-696244-3-78216a" >3</a>, which I think is quite elegant. A symmetric lens is the nearest to the-thing-that-I-was-looking-for-that-turned-out-to-be-called-a-lens. The 'lensified <tt>cons</tt>' which I postulated could be constructed as a symmetric lens.</p> <p>-Jonathan</p> <div class="bibitems"> <div class="title">Bibliography</div> <div class="bibitem" id="bibitem-696244-1">1. Michael Johnson, Robert D. Rosebrugh: Unifying Set-Based, Delta-Based and Edit-Based Lenses. Bx@ETAPS 2016: 1-13</div> <div class="bibitem" id="bibitem-696244-2">2. Johnson, M. &amp; Rosebrugh, Rob. (2014). Spans of lenses. CEUR Workshop Proceedings. 1133. 112-118.</div> <div class="bibitem" id="bibitem-696244-3">3. Martin Hofmann, Benjamin Pierce, and Daniel Wagner. 2011. Symmetric lenses. SIGPLAN Not. 46, 1 (January 2011), 371-384.</div> </div> <br/>Forum category: <a href="http://bx-community.wikidot.com/forum/c-6497891">General Discussion on Bx Languages and Tools / Default Category</a><br/>Forum thread: <a href="http://bx-community.wikidot.com/forum/t-12494314/beginner-s-question:additive-information-content-of-lenses">Beginner's question: additive &quot;information content&quot; of lenses</a>
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://bx-community.wikidot.com/forum/t-12494314#post-4352745</guid>
				<title>Re: Beginner&#039;s question: additive &quot;information content&quot; of lenses</title>
				<link>http://bx-community.wikidot.com/forum/t-12494314/beginner-s-question:additive-information-content-of-lenses#post-4352745</link>
				<description></description>
				<pubDate>Fri, 06 Sep 2019 07:48:47 +0000</pubDate>
				<wikidot:authorName>Anthony Anjorin</wikidot:authorName>				<wikidot:authorUserId>761614</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Hi Jonathan,</p> <p>I'm not sure what you mean by <em>reversible</em>, or <em>inversion</em>. In general, the &quot;inverse&quot; of a get is not unique &#8212; you typically have a choice of many puts that can all be equally &quot;good&quot;. Bx frameworks try to hammer out what laws can be used to precisely say what &quot;good&quot; means.</p> <p>I'm not from the PL/Haskell world but can still suggest [<a href="javascript:;" class="bibcite" id="bibcite-564961-1-36813a" >1</a>] for a formal overview of the quite diverse &quot;lens landscape&quot;. It might help you identify what you're interested in and provide relevant references and pointers for further reading.<br /> From a more practical, hands-on side, I guess you might be interested in BiGUL [<a href="javascript:;" class="bibcite" id="bibcite-564961-2-47292a" >2</a>], a relatively well-documented and mature Haskell library that can be used to easily program your example (and do much more).</p> <p>The bx community is very diverse and we try hard (struggle?) to leverage this as an advantage. You might find our current bx benchmark interesting as it allows a direct comparison of the different bx approaches applied to the exact same example [<a href="javascript:;" class="bibcite" id="bibcite-564961-3-2882a" >3</a>].</p> <p>Cheers,<br /> Tony</p> <div class="bibitems"> <div class="title">Bibliography</div> <div class="bibitem" id="bibitem-564961-1">1. Michael Johnson, Robert D. Rosebrugh: Unifying Set-Based, Delta-Based and Edit-Based Lenses. Bx@ETAPS 2016: 1-13</div> <div class="bibitem" id="bibitem-564961-2">2. Zhenjiang Hu, Hsiang-Shang Ko: Principles and Practice of Bidirectional Programming in BiGUL. Bidirectional Transformations - International Summer School, Oxford, UK, July 25-29, 2016, Tutorial Lectures, pages 100-150</div> <div class="bibitem" id="bibitem-564961-3">3. Anthony Anjorin, Zinovy Diskin, Frédéric Jouault, Hsiang-Shang Ko, Erhan Leblebici, Bernhard Westfechtel: BenchmarX Reloaded: A Practical Benchmark Framework for Bidirectional Transformations. BX@ETAPS 2017: 15-30</div> </div> <br/>Forum category: <a href="http://bx-community.wikidot.com/forum/c-6497891">General Discussion on Bx Languages and Tools / Default Category</a><br/>Forum thread: <a href="http://bx-community.wikidot.com/forum/t-12494314/beginner-s-question:additive-information-content-of-lenses">Beginner's question: additive &quot;information content&quot; of lenses</a>
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://bx-community.wikidot.com/forum/t-12494314#post-4352683</guid>
				<title>Beginner&#039;s question: additive &quot;information content&quot; of lenses</title>
				<link>http://bx-community.wikidot.com/forum/t-12494314/beginner-s-question:additive-information-content-of-lenses#post-4352683</link>
				<description></description>
				<pubDate>Fri, 06 Sep 2019 05:52:19 +0000</pubDate>
				<wikidot:authorName>J Jakes-Schauer</wikidot:authorName>				<wikidot:authorUserId>5626811</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>How are you, ladies &amp; gentlemen?</p> <p>I'm interested in source-to-source program transformations, which I think should be reversible, implying monomorphism. To do this, one needs to be able to invert the components of these transformations, so I was happy to discover the idea of <em>lenses</em>, which plugged a hole in my mental compendium about a decade old.</p> <p>Allow me to raise the very simple example of list decomposition, using Haskell notation. There's an obvious sense in which the inverse of the <tt>cons</tt> operation is pattern-matching on the the list head|tail, with the same notation, <tt>(:)</tt>, used for both.<sup class="footnoteref"><a id="footnoteref-465092-1" href="javascript:;" class="footnoteref" >1</a></sup> Similarly, one can say that destructuring is &quot;the same&quot; as the <tt>(head⨯tail)</tt> joint operation. By another abuse of notation, in the form of entropy: <span class="math-inline">$H(\text{&lt;destructuring&gt;}) = H(\mathtt{head}) + H(\mathtt{tail})$</span>.</p> <p>Now let me &quot;lift&quot; <tt>head</tt> and <tt>tail</tt> into the category of very well behaved (VWB?) lenses, which I'll call <tt>lhead</tt> and <tt>ltail</tt>, as</p> <div class="code"> <pre><code>lhead⭧ = head lhead⭨ x (_:xs) = x:xs ltail⭧ = tail ltail⭨ xs (x:_) = x:xs</code></pre></div> <p>where the <tt>Get</tt> operations are the original <tt>head</tt> and <tt>tail</tt>.<sup class="footnoteref"><a id="footnoteref-465092-2" href="javascript:;" class="footnoteref" >2</a></sup> Intuitively, the joint information provided by <tt>lhead|ltail</tt> is &quot;the same&quot; as that of <tt>cons</tt> plus pattern-matching, in that we could transform programs written in one syntactic convention into the other. There's probably a symmetric argument to show that a lensified <tt>cons</tt> has equivalent expressive power as well. If I were a category theorist, I might draw a little diagram.</p> <p>Unfortunately, I'm asking questions on several topics, here, about which my knowledge level is abecedarian. Are there particular subcategories of lenses which show the algebraic behavior I'm suggesting? Is there a domain-theoretic way of describing the special relationship between <tt>lhead⭨</tt>, <tt>ltail⭨</tt> and <tt>cons</tt>? I have the impression that some kind of higher-order functor should exist to map regular functions to these lenses.<sup class="footnoteref"><a id="footnoteref-465092-3" href="javascript:;" class="footnoteref" >3</a></sup> I hope someone will know what I'm talking about, even if I don't.</p> <p>Thanks,<br /> Jonathan J-S</p> <div class="footnotes-footer"> <div class="title">Footnotes</div> <div class="footnote-footer" id="footnote-465092-1"><a href="javascript:;" >1</a>. Perhaps a bit more obvious than in Lisp, in which the relevant syntax is <tt>car</tt>|<tt>cdr</tt> versus <tt>destructuring-bind</tt>.</div> <div class="footnote-footer" id="footnote-465092-2"><a href="javascript:;" >2</a>. Leaving operations on empty lists undefined for now.</div> <div class="footnote-footer" id="footnote-465092-3"><a href="javascript:;" >3</a>. I'll toss in the Futamura projections while I'm at it.</div> </div> <br/>Forum category: <a href="http://bx-community.wikidot.com/forum/c-6497891">General Discussion on Bx Languages and Tools / Default Category</a><br/>Forum thread: <a href="http://bx-community.wikidot.com/forum/t-12494314/beginner-s-question:additive-information-content-of-lenses">Beginner's question: additive &quot;information content&quot; of lenses</a>
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>