<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Conal Elliott &#187; TV</title>
	<atom:link href="http://conal.net/blog/tag/tv/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog</link>
	<description>Inspirations &#38; experiments, mainly about denotative/functional programming in Haskell</description>
	<lastBuildDate>Thu, 25 Jul 2019 18:15:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.17</generator>
	<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2F&amp;language=en_US&amp;category=text&amp;title=Conal+Elliott&amp;description=Inspirations+%26amp%3B+experiments%2C+mainly+about+denotative%2Ffunctional+programming+in+Haskell&amp;tags=blog" type="text/html" />
	<item>
		<title>Tangible Functional Programming: a modern marriage of usability and composability</title>
		<link>http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability</link>
		<comments>http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability#comments</comments>
		<pubDate>Wed, 21 Nov 2007 04:54:00 +0000</pubDate>
		<dc:creator><![CDATA[Conal]]></dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[Eros]]></category>
		<category><![CDATA[interactive programming]]></category>
		<category><![CDATA[paper]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/</guid>
		<description><![CDATA[Earlier this month I gave a tech talk at Google, entitled “Tangible Functional Programming: a modern marriage of usability and composability”. Thanks to Google folks, the talk is now up on YouTube. I showed a way make functional programming “tangible” and visual, rather than abstract and syntactic and, in doing so, to fulfill the original [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><!-- 

Title: Tangible Functional Programming: a modern marriage of usability and composability

Tags: Eros, interactive programming, presentation, TV, paper

URL: http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/

--></p>

<p><!-- references --></p>

<p>Earlier this month I gave a tech talk at Google, entitled “Tangible Functional Programming: a modern marriage of usability and composability”. Thanks to Google folks, <a href="http://www.youtube.com/watch?v=faJ8N0giqzw">the talk is now up on YouTube</a>. I showed a way make functional programming “tangible” and visual, rather than abstract and syntactic and, in doing so, to fulfill the original Unix vision of simple, composable apps.</p>

<p>The key is to keep an app’s interface and functionality combined and separable. Combined yields usability, and separable yields composability. This principle applies not only to GUI-style interfaces, but to textual IO as well, and it applies to both direct composition and syntactic composition. See <a href="http://haskell.org/haskellwiki/TV">the TV page</a> for examples of the latter. The common practice of mixing IO with functionality inhibits composability whether in C or in Haskell.</p>

<p><strong>Edits</strong>:</p>

<ul>
<li>2008-09-09: The technical/theoretical basis for this tech talk is in the paper <a href="http://conal.net/papers/Eros/">Tangible Functional Programming</a>.</li>
<li>2015-08-06: You can find the tech talk slides <a href="http://conal.net/talks/tangible-functional-programming-2007-11.pdf">here</a>.</li>
</ul>

<p><!-- without a comment or something here, the last item above becomes a paragraph --></p>
<p><a href="http://conal.net/blog/?flattrss_redirect&amp;id=38&amp;md5=78254c2dfe8feed60dffcde84ad8ac29"><img src="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png" srcset="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@2x.png 2xhttp://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@3x.png 3x" alt="Flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2Fposts%2Ftangible-functional-programming-a-modern-marriage-of-usability-and-composability&amp;language=en_GB&amp;category=text&amp;title=Tangible+Functional+Programming%3A+a+modern+marriage+of+usability+and+composability&amp;description=Earlier+this+month+I+gave+a+tech+talk+at+Google%2C+entitled+%E2%80%9CTangible+Functional+Programming%3A+a+modern+marriage+of+usability+and+composability%E2%80%9D.+Thanks+to+Google+folks%2C+the+talk+is+now+up...&amp;tags=Eros%2Cinteractive+programming%2Cpaper%2Cpresentation%2CTV%2Cblog" type="text/html" />
	</item>
		<item>
		<title>&#8220;Tangible Functional Programming&#8221; &#8212; icfp version</title>
		<link>http://conal.net/blog/posts/tangible-functional-programming-icfp-version</link>
		<comments>http://conal.net/blog/posts/tangible-functional-programming-icfp-version#comments</comments>
		<pubDate>Tue, 10 Jul 2007 05:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Conal]]></dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[arrow]]></category>
		<category><![CDATA[DeepArrow]]></category>
		<category><![CDATA[Eros]]></category>
		<category><![CDATA[gestural composition]]></category>
		<category><![CDATA[icfp]]></category>
		<category><![CDATA[interactive programming]]></category>
		<category><![CDATA[interactive visualization]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Phooey]]></category>
		<category><![CDATA[TV]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://conal.net/blog/posts/tangible-functional-programming-icfp-version/</guid>
		<description><![CDATA[I just submitted the camera-ready version of &#8220;Tangible Functional Programming&#8221;, for ICFP &#8217;07. I&#8217;m happy with this version. It&#8217;s improved drastically since my first submission to ICFP &#8217;06, thanks to many helpful comments. I&#8217;ve also been recreating the implementation on top of DeepArrow, Phooey, and TV, in preparation for a software release. It&#8217;s getting simpler, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I just submitted the camera-ready version of <a href="http://conal.net/papers/Eros">&#8220;Tangible Functional Programming&#8221;</a>, for <a href="http://www.informatik.uni-bonn.de/%7Eralf/icfp07.html">ICFP &#8217;07</a>.  I&#8217;m happy with this version. It&#8217;s improved drastically since my first submission to ICFP &#8217;06, thanks to many helpful comments. I&#8217;ve also been recreating the implementation on top of <a href="http://www.haskell.org/haskellwiki/DeepArrow">DeepArrow</a>, <a href="http://www.haskell.org/haskellwiki/Phooey">Phooey</a>, and <a href="http://www.haskell.org/haskellwiki/TV">TV</a>, in preparation for a software release. It&#8217;s getting simpler, but it&#8217;s not as simple as I want.</p>
<p><a href="http://conal.net/blog/?flattrss_redirect&amp;id=37&amp;md5=9870e5dd6003b96b97a04f322c179426"><img src="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png" srcset="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@2x.png 2xhttp://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@3x.png 3x" alt="Flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/tangible-functional-programming-icfp-version/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2Fposts%2Ftangible-functional-programming-icfp-version&amp;language=en_GB&amp;category=text&amp;title=%26%238220%3BTangible+Functional+Programming%26%238221%3B+%26%238212%3B+icfp+version&amp;description=I+just+submitted+the+camera-ready+version+of+%26%238220%3BTangible+Functional+Programming%26%238221%3B%2C+for+ICFP+%26%238217%3B07.+I%26%238217%3Bm+happy+with+this+version.+It%26%238217%3Bs+improved+drastically+since+my+first+submission+to+ICFP+%26%238217%3B06%2C+thanks+to...&amp;tags=arrow%2CDeepArrow%2CEros%2Cgestural+composition%2Cicfp%2Cinteractive+programming%2Cinteractive+visualization%2Clibrary%2CPhooey%2CTV%2Cwriting%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Software releases: TypeCompose, Phooey, GuiTV</title>
		<link>http://conal.net/blog/posts/software-releases-typecompose-phooey-guitv</link>
		<comments>http://conal.net/blog/posts/software-releases-typecompose-phooey-guitv#comments</comments>
		<pubDate>Fri, 30 Mar 2007 20:17:00 +0000</pubDate>
		<dc:creator><![CDATA[Conal]]></dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[GuiTV]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Phooey]]></category>
		<category><![CDATA[TV]]></category>
		<category><![CDATA[type composition]]></category>

		<guid isPermaLink="false">http://conal.net/blog/posts/software-releases-typecompose-phooey-guitv/</guid>
		<description><![CDATA[Three related software releases. I am very interested in comments and contributions. TypeCompose provides some classes &#38; instances for forms of type composition. It also includes a very simple implementation of data-driven computation. I factored it out of a new implementation of Phooey. Phooey is a library for functional user interfaces. Highlights in this 0.3 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Three related software releases.  I am very interested in comments and contributions.</p>

<p><a href="http://haskell.org/haskellwiki/TypeCompose" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">TypeCompose</a> provides some classes &amp; instances for forms of type composition. It also includes a very simple implementation of data-driven computation.  I factored it out of a new implementation of <a href="http://haskell.org/haskellwiki/Phooey" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Phooey</a>.
<span class="sg">
</span><a href="http://haskell.org/haskellwiki/Phooey" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Phooey</a> is a library for functional user interfaces.  Highlights in this 0.3 release:</p>

<ul><li> Uses new <a href="http://haskell.org/haskellwiki/TypeCompose" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> TypeCompose</a> package, which includes a simple implementation of data-driven computation.</li><li> New Applicative functor interface.</li><li> Eliminated the catch-all Phooey.hs module.  Now import any one of Graphics.UI.Phooey.{Monad ,Applicative,Arrow}.</li><li> Phooey.Monad has two different styles of output widgets, made by owidget and owidget&#8217;. The latter is used to implement Phooey.Applicative.</li><li> Self- and mutually-recursive widgets now work again in Phooey.Monad. They wedge in Phooey.Arrow and Phooey.Applicative.</li></ul>

<p>Phooey is also used in <a href="http://haskell.org/haskellwiki/GuiTV" title="GuiTV" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> GuiTV</a>, a library for composable interfaces and &#8220;tangible values&#8221;.  I&#8217;ve also just updated GuiTV to 0.3, to sync with Phooey 1.0.
<span class="sg">
</span></p>
<p><a href="http://conal.net/blog/?flattrss_redirect&amp;id=33&amp;md5=a7538172707138bbf7b228cdff2474dd"><img src="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png" srcset="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@2x.png 2xhttp://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@3x.png 3x" alt="Flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/software-releases-typecompose-phooey-guitv/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2Fposts%2Fsoftware-releases-typecompose-phooey-guitv&amp;language=en_GB&amp;category=text&amp;title=Software+releases%3A+TypeCompose%2C+Phooey%2C+GuiTV&amp;description=Three+related+software+releases.+I+am+very+interested+in+comments+and+contributions.+TypeCompose+provides+some+classes+%26amp%3B+instances+for+forms+of+type+composition.+It+also+includes+a+very+simple+implementation...&amp;tags=GuiTV%2Clibrary%2CPhooey%2CTV%2Ctype+composition%2Cblog" type="text/html" />
	</item>
		<item>
		<title>ICFP &#8217;07 paper draft &#8212; comments please</title>
		<link>http://conal.net/blog/posts/icfp-07-paper-draft-comments-please</link>
		<comments>http://conal.net/blog/posts/icfp-07-paper-draft-comments-please#comments</comments>
		<pubDate>Tue, 27 Mar 2007 19:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Conal]]></dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[combinators]]></category>
		<category><![CDATA[DeepArrow]]></category>
		<category><![CDATA[end-user programming]]></category>
		<category><![CDATA[Eros]]></category>
		<category><![CDATA[icfp]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://conal.net/blog/posts/icfp-07-paper-draft-comments-please/</guid>
		<description><![CDATA[Warning: if you&#8217;re on the ICFP program committee and want to preserve double-blind reviewing, please ignore this post. I&#8217;ve been working on an ICFP paper called “Tangible Functional Programming”, revising my last year&#8217;s submission on Eros. If you&#8217;re interested in taking a look, I&#8217;d greatly appreciate any comments, especially before the April 6 submission deadline. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Warning: if you&#8217;re on the ICFP program committee and want to preserve double-blind reviewing, please ignore this post.</p>

<p>I&#8217;ve been working on an ICFP paper called “<a href="http://conal.net/papers/Eros">Tangible Functional Programming</a>”, revising my last year&#8217;s submission on Eros.  If you&#8217;re interested in taking a look, I&#8217;d greatly appreciate any comments, especially before the April 6 submission deadline.</p>

<p><span style="font-weight: bold;">Abstract</span></p>

<blockquote>  <p>We present a user-friendly approach to unifying program creation and  execution, based on a notion of “tangible values” (TVs), which are visible and interactive GUI manifestations of pure values. Programming happens by gestural  composition of TVs. Our goal is to give end-users the ability to  create parameterized, composable content without imposing the usual abstract and  linguistic working style of programmers. We hope that such a system will put the  essence of programming into the hands of many more people, and in particular  people with artistic/visual creative style.</p>  <p>In realizing this vision, we develop algebras for visual presentation and for  “deep” function application, where function and argument may both be nested  within a structure of tuples, functions, etc. Composition gestures are  translated into chains of combinators that act simultaneously  on statically typed values and their visualizations.</p> </blockquote>

<p>
</p>

<p style="text-align: left;">Here is a figure from the paper, showing one stage of an interactively composed interactive 2D region. The user selects compatibly-typed input and output widgets, typically in different TVs. The result is a new TV that merges the source TVs, <i>except</i> for the connected input and output, which vanish.  The sliders control the disk and checker sizes and the checker&#8217;s rotation angle.</p>

<p align="center"><img src="http://conal.net/papers/Eros/png/make-diskChecker.png" border="0" /></p>

<p><b>Edit</b> on March 28:I just added two relevant pointers to the <href=http: net="" papers="" eros="">paper&#8217;s web page:</href=http:>
</p>

<ul><li>The <a href="http://haskell.org/haskellwiki/TV">TV</a> library page</li><li>The <a href="http://haskell.org/haskellwiki/DeepArrow">DeepArrow</a> library page</li></ul>
<p><a href="http://conal.net/blog/?flattrss_redirect&amp;id=32&amp;md5=b60d4e3afa1c33dfba8abb6520038173"><img src="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png" srcset="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@2x.png 2xhttp://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@3x.png 3x" alt="Flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/icfp-07-paper-draft-comments-please/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2Fposts%2Ficfp-07-paper-draft-comments-please&amp;language=en_GB&amp;category=text&amp;title=ICFP+%26%238217%3B07+paper+draft+%26%238212%3B+comments+please&amp;description=Warning%3A+if+you%26%238217%3Bre+on+the+ICFP+program+committee+and+want+to+preserve+double-blind+reviewing%2C+please+ignore+this+post.+I%26%238217%3Bve+been+working+on+an+ICFP+paper+called+%E2%80%9CTangible+Functional+Programming%E2%80%9D%2C+revising...&amp;tags=combinators%2CDeepArrow%2Cend-user+programming%2CEros%2Cicfp%2CTV%2Cblog" type="text/html" />
	</item>
		<item>
		<title>separating IO from logic &#8212; example</title>
		<link>http://conal.net/blog/posts/separating-io-from-logic-example</link>
		<comments>http://conal.net/blog/posts/separating-io-from-logic-example#comments</comments>
		<pubDate>Tue, 13 Feb 2007 02:04:00 +0000</pubDate>
		<dc:creator><![CDATA[Conal]]></dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[IO]]></category>
		<category><![CDATA[modularity]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://conal.net/blog/posts/separating-io-from-logic-example/</guid>
		<description><![CDATA[This post is a teaser for an article in my TiddlyWiki-based journal. The article illustrates an approach to separating logic and IO using the TV library. The TV approach clarifies the pure logic part and the IO part and is more conveniently composable than the mixed logic/IO formulation. I&#8217;ve just released TV-0.2, which omits GUI [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This post is a teaser for an article in my TiddlyWiki-based journal.  The article illustrates an approach to separating logic and IO using the <a target="_blank" title="External link to  http://haskell.org/haskellwiki/TV" href="http://haskell.org/haskellwiki/TV" class="externalLink">TV</a> library. The TV approach clarifies the pure logic part and the IO part and is more conveniently composable than the mixed logic/IO formulation.</p>

<p>I&#8217;ve just released TV-0.2, which omits GUI functionality.  That functionality is now present in the small new package <a target="_blank" title="External link to  http://haskell.org/haskellwiki/GuiTV" href="http://haskell.org/haskellwiki/GuiTV" class="externalLink">GuiTV</a>.  The reason for this split is that the GUI support depends on <a target="_blank" title="External link to  http://wxhaskell.sourceforge.net" href="http://wxhaskell.sourceforge.net/" class="externalLink">wxHaskell</a>, which currently can be difficult to install.  Only TV (not GuiTV) is needed for this example.</p>

<p>See <a target="_blank" title="External link to  http://journal.conal.net/#%5B%5Bseparating%20IO%20from%20logic%20--%20example%5D%5D" href="http://journal.conal.net/#%5B%5Bseparating%20IO%20from%20logic%20--%20example%5D%5D" class="externalLink">the article here</a>.</p>

<p><span style="font-weight: bold;">Edit of Feb 13</span>: If you tried the TiddlyWiki article in Opera and got an error, please try again.  Problem fixed.  (Slight difference in regexp handling in Opera vs FF &amp; IE.)</p>

<p><span style="font-weight: bold;">Edit of March 5</span>: This article was inspired by an example in Don Stewart&#8217;s &#8220;<a href="http://www.cse.unsw.edu.au/%7Edons/blog/2006/12/16#programming-haskell-intro">Programming Haskell</a>&#8221; post.</p>
<p><a href="http://conal.net/blog/?flattrss_redirect&amp;id=31&amp;md5=e1b447b334de0e50963eb2613fabab23"><img src="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png" srcset="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@2x.png 2xhttp://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@3x.png 3x" alt="Flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/separating-io-from-logic-example/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2Fposts%2Fseparating-io-from-logic-example&amp;language=en_GB&amp;category=text&amp;title=separating+IO+from+logic+%26%238212%3B+example&amp;description=This+post+is+a+teaser+for+an+article+in+my+TiddlyWiki-based+journal.+The+article+illustrates+an+approach+to+separating+logic+and+IO+using+the+TV+library.+The+TV+approach+clarifies...&amp;tags=example%2CIO%2Cmodularity%2CTV%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Software releases</title>
		<link>http://conal.net/blog/posts/software-releases</link>
		<comments>http://conal.net/blog/posts/software-releases#comments</comments>
		<pubDate>Tue, 23 Jan 2007 06:09:00 +0000</pubDate>
		<dc:creator><![CDATA[Conal]]></dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[DeepArrow]]></category>
		<category><![CDATA[Eros]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Phooey]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://conal.net/blog/posts/software-releases/</guid>
		<description><![CDATA[Last week I released three Haskell libraries: DeepArrow 0.0, Phooey 0.1, and TV 0.0. These libraries came from Eros, which aims at creating a right-brain-friendly (concrete, non-linguistic) &#8220;programming&#8221; process. I&#8217;ve had a growing intuition over the last fifteen years that media authoring tools can be usefully looked at as environments for functional programming. I&#8217;d been [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Last week I released three Haskell libraries: <a href="http://haskell.org/haskellwiki/DeepArrow">DeepArrow</a> 0.0, <a href="http://haskell.org/haskellwiki/Phooey">Phooey</a> 0.1, and <a href="http://haskell.org/haskellwiki/TV">TV</a> 0.0.</p>

<p>These libraries came from <a href="http://conal.net/papers/Eros">Eros</a>, which aims at creating a right-brain-friendly (concrete, non-linguistic) &#8220;programming&#8221; process. I&#8217;ve had a growing intuition over the last fifteen years that media authoring tools can be usefully looked at as environments for functional programming. I&#8217;d been wondering how to map a user&#8217;s gestures into operations on a functional program. Lots of noodling led to ideas of composable interfaces and &#8220;tangible values&#8221; (term thanks to Sean Seefried) and gestural composition in Eros.</p>

<p>Eros is more complicated than I like, so I started splitting it into pieces:</p>

<ul><li> <a href="http://haskell.org/haskellwiki/Phooey">Phooey</a> is a functional GUI library that has much of Eros&#8217;s GUI implementation techniques, but much more carefully structured than in the Eros paper.
</li><li> <a href="http://haskell.org/haskellwiki/DeepArrow">DeepArrow</a> has the general notion of &#8220;deep application&#8221;
</li><li> <a href="http://haskell.org/haskellwiki/TV">TV</a> has the algebra of <i>composable interfaces</i>, or visualizations of pure values, and it has <i>tangible values</i>, which are separable combinations of interface and value.  It uses Phooey to generate GUIs very simply from interfaces</li></ul>

<p>Although these libraries came from Eros, I&#8217;d like to see other applications as well.</p>

<p>Where am I going with library development?</p>

<ul><li> Figure out how to support simple GUIs and Eros&#8217;s <em>gesturally composable</em> GUIs, without code/library replication.
</li><li> Re-implement Eros on top of simpler pieces.</li><li> Refactor <a href="http://conal.net/Pajama">Pajama</a> into reusable libraries and release.
<ul><li>Building and optimizing &#8220;expressions&#8221;
</li><li>Common sub-expression elimination
</li><li>Generation of Java code</li><li>Perhaps other back-ends besides Java</li><li>Pajama, on top of these pieces</li></ul></li></ul>

<p><span style="font-weight: bold;">Edit of March 5, 2007</span>:  TV is now split into a core <a dragover="true" href="http://haskell.org/haskellwiki/TV">TV</a> package, with no GUI functionality, and <a href="http://haskell.org/haskellwiki/GuiTV">GuiTV,</a> with Phooey-based GUI creation.  The reason for the split is that <a href="http://haskell.org/haskellwiki/Phooey">Phooey</a> depends on <a href="http://wxhaskell.sourceforge.net/">wxHaskell</a>, which can be difficult to install.</p>
<p><a href="http://conal.net/blog/?flattrss_redirect&amp;id=30&amp;md5=19448e0a9bb58b65046a865b3fdde307"><img src="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png" srcset="http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@2x.png 2xhttp://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white.png, http://conal.net/blog/wp-content/plugins/flattr/img/flattr-badge-white@3x.png 3x" alt="Flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/software-releases/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=conal&amp;popout=1&amp;url=http%3A%2F%2Fconal.net%2Fblog%2Fposts%2Fsoftware-releases&amp;language=en_GB&amp;category=text&amp;title=Software+releases&amp;description=Last+week+I+released+three+Haskell+libraries%3A+DeepArrow+0.0%2C+Phooey+0.1%2C+and+TV+0.0.+These+libraries+came+from+Eros%2C+which+aims+at+creating+a+right-brain-friendly+%28concrete%2C+non-linguistic%29+%26%238220%3Bprogramming%26%238221%3B+process.+I%26%238217%3Bve...&amp;tags=DeepArrow%2CEros%2Clibrary%2CPhooey%2CTV%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>
