<?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 denotational programming in Haskell</description>
	<lastBuildDate>Fri, 30 Jul 2010 02:56:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>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[]]></description>
			<content:encoded><![CDATA[<p>Earlier this month I gave a tech talk at Google, entitled &#8220;Tangible Functional Programming: a modern marriage of usability and composability&#8221;.  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 &#8220;tangible&#8221; 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&#8217;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>Edit 2008-09-09</strong>: The technical/theoretical basis for this tech talk is in the paper <a href="http://conal.net/papers/Eros/">Tangible Functional Programming</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>
		</item>
		<item>
		<title>&quot;Tangible Functional Programming&quot; &#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>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[]]></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 &#8216;07</a>.  I&#8217;m happy with this version. It&#8217;s improved drastically since my first submission to ICFP &#8216;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>
]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/tangible-functional-programming-icfp-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</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>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[]]></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>
]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/software-releases-typecompose-phooey-guitv/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ICFP &#8216;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>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[]]></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>
]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/icfp-07-paper-draft-comments-please/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</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>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[]]></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>
]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/separating-io-from-logic-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</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>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[]]></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>
]]></content:encoded>
			<wfw:commentRss>http://conal.net/blog/posts/software-releases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
