<div>Hi Conal,</div>
<div>&nbsp;</div>
<div>Looks like an interesting system.</div>
<div>&nbsp;</div>
<div>A few questions:</div>
<div>&nbsp;&nbsp; - What is the underlying&nbsp;Arrow here, and how does it differ from Yampa?&nbsp; (And the obvious follow-on: If they are similar, why not just use Yampa?)</div>
<div>&nbsp;&nbsp; -&nbsp;How will your layout model deal with&nbsp;layouts that aren't rectilinear?</div>
<div>&nbsp;&nbsp; - Do you&nbsp;support events or switching (in the FRP sense)?</div>
<div>&nbsp;&nbsp; - How do you plan to deal with dynamic collections (opening/closing new&nbsp;windows at runtime, or adding/removing widgets from a running GUI)?&nbsp;&nbsp;IMO, this is the biggest challenge to&nbsp;presenting&nbsp;a purely functional&nbsp;API but using a standard GUI toolkit for the underlying widget set.
</div>
<div>&nbsp;</div>
<div>Regards,</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; -Antony<br>&nbsp;</div>
<div><span class="gmail_quote">On 12/12/06, <b class="gmail_sendername">Conal Elliott</b> &lt;<a href="mailto:conal@conal.net">conal@conal.net</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Announcing <a title="External link to http://conal.net/phooey" onclick="return top.js.OpenExtLink(window,event,this)" href="http://conal.net/phooey" target="_blank">
Phooey</a>, a functional UI library for Haskell.<br><br>GUIs are usually programmed in an &quot;unnatural&quot; style, in that implementation dependencies are inverted, relative to logical dependencies. This reversal results directly from the imperative orientation of most GUI libraries. While outputs depend on inputs from a user and semantic point of view, the imperative approach imposes an implementation dependence of inputs on outputs.
<br><br>Phooey (&quot;<strong>Ph</strong>unctional <strong>oo</strong>s<strong>e</strong>r <strong>y</strong>nterfaces&quot;) retains the functional style, in which outputs are expressed in terms of inputs. In addition, Phooey supports dynamic input bounds, flexible layout, and mutually-referential widgets. 
<br><br>As an example of Phooey's style, below is a simple shopping list GUI. The <em>total</em> displayed at the bottom of the window always shows the sum of the values of the <em>apples</em> and <em>bananas</em> input sliders. When a user changes the inputs, the output updates accordingly.
<br>
<blockquote><img src="http://conal.net/phooey/images/ui1.png"><br></blockquote>Phooey is structured as an arrow, and this example uses arrow notation. The code: <br><pre>    ui1 :: UI () ()<br>    ui1 = title &quot;Shopping List&quot; $
<br>          proc () -&gt; do<br>            a &lt;- title &quot;apples&quot;  (islider 3) -&lt; (0,10)<br>            b &lt;- title &quot;bananas&quot; (islider 7) -&lt; (0,10)
<br>            title &quot;total&quot; showDisplay        -&lt; a+b<br></pre><br>I am working on a paper about Phooey. For now, please see <a title="External link to  http://darcs.haskell.org/packages/phooey/doc" onclick="return top.js.OpenExtLink(window,event,this)" href="http://darcs.haskell.org/packages/phooey/doc" target="_blank">
the Haddock documentation</a> (which includes more examples), and try the code via<br><br>
<div style="MARGIN-LEFT: 40px"><code style="FONT-FAMILY: arial,sans-serif">darcs get </code><a title="External link to http://darcs.haskell.org/packages/phooey" style="FONT-FAMILY: arial,sans-serif" onclick="return top.js.OpenExtLink(window,event,this)" href="http://darcs.haskell.org/packages/phooey" target="_blank">
http://darcs.haskell.org/packages/phooey</a><span style="FONT-FAMILY: arial,sans-serif"> </span><code style="FONT-FAMILY: arial,sans-serif">--partial</code><br>&nbsp;</div><br>Directions for building are in the <a title="External link to  http://darcs.haskell.org/packages/phooey/README" onclick="return top.js.OpenExtLink(window,event,this)" href="http://darcs.haskell.org/packages/phooey/README" target="_blank">
README</a> file. Distribution tarballs are <a title="External link to  http://darcs.haskell.org/packages/phooey/dist" onclick="return top.js.OpenExtLink(window,event,this)" href="http://darcs.haskell.org/packages/phooey/dist" target="_blank">
here</a>.<br><br>Comments and collaboration are very welcome!<br><br>Cheers, <br><span class="sg"><br>&nbsp; &nbsp; &nbsp;&nbsp; - Conal<br></span><br>P.S. I'm very grateful for Don Stewart's recent pointers on how to create &amp; release Haskell projects.
<br><br>_______________________________________________<br>Haskell mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:Haskell@haskell.org">Haskell@haskell.org</a><br><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.haskell.org/mailman/listinfo/haskell" target="_blank">
http://www.haskell.org/mailman/listinfo/haskell</a><br><br><br></blockquote></div><br>