Re: [Haskell] Call for GUI examples - Functional Reactive Programming
David Barbour wrote:
Heinrich Apfelmus wrote:
Can GUI programming be liberated from the IO monad?
I believe it can be. But is FRP the right way to achieve this? Most of the GUI problems I've ever encountered involve open systems: configuration files, plugins, command and control, database crud, networking. Most of the FRP GUI examples I've encountered involve closed systems: calculators, tangible values, single-player games.
I am often left with the feeling that we're bridging the wrong gaps with FRP. Consequently, I've been developing a paradigm that adapts what I consider the best features of FRP for composition of open systems [1].
Anyhow, I'm guessing your query is because you'd like some sample problems upon which to whet your FRP model. Rather than a bunch of toy UI elements, I would suggest choosing examples with open elements, such as: * a personal wiki (cf. TiddlyWiki) with a file or SQLite database for persistence * a database browser/editor that reads the schema from the database and adapts the display appropriately * a Dr. Mario clone with support for online 2-player mode * an RSS display widget, configured with a bookmark file * a stock-ticker or weather-report widget with a simple configuration file * maps and KML
[..]
I'm sure you can think of something more interesting to yourself, of course. The world needs proofs that open, dynamically configured systems are handled effectively in FRP. Or, if you struggle and the resulting code is inelegant without compromising the purity of FRP, well, that's useful information, too.
Nice examples. The real-time data display (stock ticker, weather) has been mentioned a lot, I will probably try that one. I don't see any difficulties with open systems, though. Sure, you need some driver code to communicate, but it's all Events and Behaviors from then on. The function fromPoll :: IO a -> NetworkDescription (Behavior a) is particularly nice, it allows you to interpret any data source as a time-varying value. For instance, here the completely random function that returns a random value at each point in time: brandom <- fromPoll (randomRIO (0,1) :: IO Double) Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com
participants (1)
-
Heinrich Apfelmus