
Henning Thielemann wrote:
Heinrich Apfelmus wrote:
Can GUI programming be liberated from the IO monad? Functional Reactive Programming (FRP) promises as much, and I'm trying to make this dream a reality with my [reactive-banana][] library. Having released version 0.4.0.0, I am now looking for example programs to direct the future evolution of the library.
This is the request that I was waiting for. :-)
:D
* Notes of a musical performance can be modeled as event streams (MIDI), as Henning Thielemann has [done with great effect][midi streams]. Surely, reactive-banana should be up to the task, but writing an arpeggiator seems impossible at the moment.
Oh, I am addressed explicitly, thanks! Yes, GUI for 'streamed' would be nice, too. In the meantime I switched from an approach with lazy lists to one with arrow-like stream processors. This way I could resolve all issues with wrong timing and inappropriate waiting, but now code looks more low-level. There are some examples lying around, that I even not started to implement, because I expect that implementing them in the current low-level way will yield nasty bugs. Thus I am highly interested in more sophisticated MIDI stream editor combinators. I expect that inspiration from other FRP frameworks would help me.
Of course, my intention was that you throw away your stream processors and use reactive-banana for everything. ;D I have made sure that it can be used both for real-time and for offline computations. Could you expand a little on your arrow-like stream processors? What do the arrows look like, data SF a b = SF (a -> (b, SF a b)) ? Which additional primitives did you include, for instance switch :: SF in (out, Maybe t) -> (t -> SF in out) -> SF in out delay :: Time -> SF a b -> SF a b ? And of course, I am particularly interested in the nasty examples that you came up with. :) Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com