I have released version 0.5.0.0 of my reactive-banana library on hackage.
For this release, I have introduced many changes to the public API and completely rewritten the internals. However, the core FRP model and semantics are merely extended, not changed, so it should be straightforward to port existing code to the new version.
Howdy, cowboy, it’s advertisment time! If you like the reactive-banana project, you can support me with a small donation: . Furthermore, at the end of every month, all ardent supporters will receive ¢2 worth of status information and fruity puns! (This magnificent offer can be respectfully declined in your Flattr preferences.)
The most profound API change is that the types Event
, Behavior
and NetworkDescription
now carry an phantom type parameter t
, as discussed in a previous blog post.
Simultaneous event occurrences have long been a point of trouble. With the rewritten internals, I was now able to add combinators like calm
or unionWith
that allow you to observe and handle simultaneity. This is particularly useful for dealing with incremental updates. Furthermore, I have removed the general Monoid
instance for Event
to discourage the accidental introduction of simultaneous occurrences. Taking it even further, I have added an experimental module Reactive.Banana.Experimental.Calm
that exports a variant semantics where simultaneous occurrences are simply forbidden.
Another noteworthy change is that the Behavior
type now partially exposes a notion of “changes”, similar to the old Discrete
type, which I have removed again. Suggested by Elliott Hird, this change greatly simplifies your reactive-banana experience as it restores the prominence of the Behavior
type. While Behavior
is still to be thought of as continuously varying value, the glue code that communicates with GUI frameworks can now observe changes, but only inside the NetworkDescription
monad sin-bin. I think that this is a good compromise between elegant semantics and efficient implementation.
Many thanks to all users for suggesting and discussing changes with me, especially Elliott Hird, Gregory Crosswhite and Henning Thielemann.