Thanks Greg, appreciated - I understand that neither FrTime & Flapjax is pure functional, but it allows me to think differently on how program can be structured, and it's great to see a different way. <br><br>Thanks,
<br>yinso <br><br><div><span class="gmail_quote">On 5/16/07, <b class="gmail_sendername">Gregory Cooper</b> <<a href="mailto:greg@cs.brown.edu">greg@cs.brown.edu</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
For what it's worth, both FrTime and Flapjax interact fairly smoothly<br>with their host languages' object systems. Our paper from FLOPS '06<br>tells the story with FrTime:<br><br><a href="http://www.cs.brown.edu/people/sk/Publications/Papers/Published/ick-adapt-oo-fwk-frp/">
http://www.cs.brown.edu/people/sk/Publications/Papers/Published/ick-adapt-oo-fwk-frp/</a><br><br>The paper describes a strategy for wrapping sets of classes (in this<br>case a GUI toolkit) so they can work with signals. The code is
<br>available in the demos/gui subdirectory of the FrTime collection. A<br>similar wrapper (for the HTML document object model) is built directly<br>into Flapjax.<br><br>Flapjax's functional reactive values are actually Javascript objects,
<br>and many dataflow operations exist as prototype methods. For example,<br>to make a stream of AJAX requests based on the content of a text box,<br>we can write code like this:<br><br> var linksInfoE = buildRequest(extractValue_e('userName').
<br> filter_e(nameFilter).<br> calm_e(500)).evalForeignScriptVal_e();<br><br>This extracts the sequence of values (over time) from the 'userName'
<br>text box, filters out invalid names, and waits until the user stops<br>typing briefly before making the request. The result of the<br>expression is the sequence of responses from the server. One nice<br>thing is that method invocations (thanks to the implicit 'this'
<br>parameter) allow us to "pipe together" a sequence of transformations,<br>much like Unix shell scripting.<br><br>Greg<br><br>On 5/16/07, Matthias Felleisen <<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu
</a>> wrote:<br>><br>> You may also want to look at the draw.* package that comes with<br>> ProfessorJ and the (upcoming second volume of How to Design) Classes.<br>> It is an applicative approach to some GUI programming using classes
<br>> and objects. Because of the implicit 'this' parameter, I consider it<br>> superior to FRP.<br>><br>> For now just look for teachpacks in Help Desk and follow the HtDC link.<br>><br>> -- Matthias
<br>><br>><br>><br>><br>><br>><br>> On May 16, 2007, at 3:46 AM, YC wrote:<br>><br>> ><br>> > On 5/15/07, Grant Rettke <<a href="mailto:grettke@acm.org">grettke@acm.org</a>> wrote: > GUIs are a
<br>> > perfect example to think about using a functional solution.<br>> > > So, think about it...it would be terrible!!!<br>> ><br>> > I think the same, but I just found that there is a style of FP
<br>> > called Functional Reactive Programming that purportedly models GUI<br>> > more declaratively than OOP's handlers & events. Flapjax and<br>> > FrTime are working implementations of FRP.<br>
> ><br>> > <a href="http://citeseer.ist.psu.edu/cooper04frtime.html">http://citeseer.ist.psu.edu/cooper04frtime.html</a><br>> ><br>> > <a href="http://www.flapjax-lang.org/">http://www.flapjax-lang.org/
</a><br>> ><br>> > <a href="http://www.haskell.org/frp/">http://www.haskell.org/frp/</a><br>> ><br>> > It seems that I found more links w.r.t to functional style in<br>> > Haskell on the net maybe due to Haskell being pure functional...
<br>> ><br>> > Thanks,<br>> > yinso<br>> ><br>> > _________________________________________________<br>> > For list-related administrative tasks:<br>> > <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">
http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>><br>> _________________________________________________<br>> For list-related administrative tasks:<br>> <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">
http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>><br></blockquote></div><br>