reactive-banana
Library for functional reactive programming (FRP).
http://wiki.haskell.org/Reactive-banana
Version on this page: | 1.3.2.0@rev:2 |
LTS Haskell 22.33: | 1.3.2.0@rev:3 |
Stackage Nightly 2024-09-07: | 1.3.2.0@rev:4 |
Latest on Hackage: | 1.3.2.0@rev:4 |
reactive-banana-1.3.2.0@sha256:e3aeb59ee549b0cd573c2b9fe01ea17594a8996a2ee0ae5cad8cf7b93ff7d64f,6024
Module documentation for 1.3.2.0
- Control
- Control.Event
- Reactive
- Reactive.Banana
- Reactive.Banana.Combinators
- Reactive.Banana.Frameworks
- Reactive.Banana.Model
- Reactive.Banana.Prim
- Reactive.Banana.Prim.High
- Reactive.Banana.Prim.Low
- Reactive.Banana.Prim.Mid
- Reactive.Banana
Reactive-banana is a library for Functional Reactive Programming (FRP).
FRP offers an elegant and concise way to express interactive programs such as graphical user interfaces, animations, computer music or robot controllers. It promises to avoid the spaghetti code that is all too common in traditional approaches to GUI programming.
See the project homepage http://wiki.haskell.org/Reactive-banana for more detailed documentation and examples.
Stability forecast. This is a stable library, though minor API changes are still likely. It features an efficient, push-driven implementation and has seen some optimization work.
API guide.
Start with the Reactive.Banana
module.
Changes
Changelog for the reactive-banana
package
Version 1.3.2.0 (2023-01-22)
- Fixed multiple space leaks for dynamic event switching by completely redesigning low-level internals. Added automated tests on garbage collection and space leaks in order to make sure that the leaks stay fixed. #261, #267, #268
Version 1.3.1.0 (2022-08-11)
- Various internal performance improvements. #257, #258
- Fix a space leak in dynamic event switching. #256
- Reduce memory usage of
stepper
/accumB
. #260 - Prevent a deadlock if the network crashes when evaluating a
Behavior
orEvent
. #262
Version 1.3.0.0 (2022-03-28)
- Added
Semigroup
andMonoid
instances toMoment
andMomentIO
. #223 - Add
@>
operator. #229 switchE
now takes an initial event. This is breaking change. The previous behavior can be restored by usingswitchE never
. #165- Triggering an
AddHandler
no longer allocates, leading to a minor performance improvement. #237 - A new
once
combinator has been added that filters anEvent
so it only fires once. #239 MonadMoment
instances have been added for all possibly monad transformers (from thetransformers
library). #248- Some internal refactoring to reduce allocations and improve performance. #238
- The
Reactive.Banana.Prim
hierarchy has been changed to better reflect the abstraction hierarchy. #241
Version 1.2.2.0
- Optimize the implementation of
Graph.listParents
#209 - Replace a use of
foldl
withfoldl'
. #212 - Simplify the internal
mkWeakIORef
function. #154 - Add
merge
andmergeWith
combinators. #163, #220 - Make internal SCC pragmas compatible with the GHC 9.0 parser. #208
- Change
insertWith (flip (++))
toinsertWith (++)
ininsertEdge
. #211 - Add
Semigroup a => Semigroup (Behavior a)
andMonoid a => Monoid (Behavior a)
instances. #185 - Loosen the upper-bound for
hashable
andsemigroups
. #205
version 1.2.1.0
- Add
Num
,Floating
,Fractional
, andIsString
instances forBehavior
. #34 - Support
containers-0.6
. #191
version 1.2.0.0
- Make
MonadFix
superclass ofMonadMoment
. #128 - Add
Semigroup
andMonoid
instances forEvent
. #104 - Semigroup compatibility with GHC 8.4.1 #168
- Increased upper-bound on
pqueue
.
version 1.1.0.1
- Adapt library to work with GHC-8.0.1.
version 1.1.0.0
- Fix bug: Types of
switchB
andswitchE
need to be in theMoment
monad. - Clean up and simplify model implementation in the
Reactive.Banana.Model
module. - Update type signatures of the
interpret*
functions to make it easier to try FRP functions in the REPL. - Remove
showNetwork
function.
version 1.0.0.1
- Improve documentation.
- Add prose section on recursion.
- Improve explanation for the
changes
function.
- Bump
transfomers
dependency. - Remove defunct
UseExtensions
flag from cabal file.
version 1.0.0.0
The API has been redesigned significantly in this version!
- Remove phantom type parameter
t
fromEvent
,Behavior
andMoment
types.- Change accumulation functions (
accumB
,accumE
,stepper
) to have a monadic result type. - Merge module
Reactive.Banana.Switch
into moduleReactive.Banana.Combinators
. - Simplify types of the switching functions (
switchE
,switchB
,observeB
,execute
). - Remove functions
trimE
andtrimB
. - Remove types
AnyMoment
andIdentity
.
- Change accumulation functions (
- Remove
Frameworks
class constraint, useMomentIO
type instead.- Add class
MonadMoment
for both polymorphism over theMoment
andMomentIO
types.
- Add class
- Change type
Event
to only allow a single event per moment in time.- Remove function
union
. UseunionWith
instead. - Change function
unions
to only merge events of typeEvent (a -> a)
.
- Remove function
- Remove module
Reactive.Banana.Experimental.Calm
. - Change the model implementation in the module
Reactive.Banana.Model
to the new API as well.
Other changes:
- Add
mapEventIO
utility function to build an Event that contains the result of an IO computation. - Add
newBehavior
utility function to build a Behavior that can be updated with aHandler
. - Add illustrations to the API documentation.
version 0.9.0.0
- Implement garbage collection for dynamically switched events.
- Fix issue #79 where recursive declarations would sometimes result in dropped events.
- Limit value recursion in the
Moment
monad slightly. - Change
initial
andvalueB
to behave subtly different when it comes to value recursion in theMoment
monad. - Add
Functor
,Applicative
andMonad
instances for theFrameworksMoment
type. - Depend on the pqueue package instead of the psqueues package again, as the former has been updated to work with the current version of GHC.
version 0.8.1.2
version 0.8.1.1
- Links to the Haskell wiki now point to the
http://wiki.haskell.org
subdomain.
version 0.8.1.0
- Module
Reactive.Banana.Switch
now adheres to the “Functor Applicative Monad Proposal” proposal]amp-proposal.
version 0.8.0.4
- Just a re-upload. The previous archive was broken.
version 0.8.0.3
- Export the
Future
type. - Restrict
containers
dependency to lower bound 0.5.
version 0.8.0.2
- Fix compilation issue with hiding
empty
from the moduleReactive.Banana.Prim.Order
.
version 0.8.0.1
- New examples
Counter.hs
andOctave.hs
. - Bump
transfomers
dependency.
version 0.8.0.0
- A new module
Reactive.Banana.Prim
exports primitive combinators that you can use to implement your own FRP library with a different API. - The push-driven implementation in
Reactive.Banana.Prim
now has the performance characteristics of an actual push-driven implementation. Some work has gone into optimizing constant factors as well. However there is still no garbage collection for dynamically created events and behaviors. - The
accumE
andaccumB
combinators evaluate their state to WHNF to avoid a space leak. (Fixes issue #52). On the other hand,Behavior
values are evaluated on demanded, i.e. only when required by the apply combinator<@>
or similar. - Recursion between events and behaviors should now work as advertised. (Fixed issue #56).
- The deprecated
liftIONow
function has been removed. - The type of the
changes
function now indicates that the new Behavior value is only available in the context ofreactimate
. A variantreactimate'
makes this explicit. - The module
Control.Event.Handler
now exports theAddHandler
type, which is now anewtype
. The moduleReactive.Banana.Frameworks.AddHandler
has been removed.
version 0.7.1.0
- Deprecate the
liftIONow
function in favor ofliftIO
.
version 0.7.0.0
- Dynamic event switching. Combinators are now available in the module
Reactive.Banana.Switch
. - Rename
NetworkDescription
toMoment
, add class constraintFrameworks t
. - No longer compiles with the JavaScript backend of the Utrecht Haskell compiler.
- Change the
changes
combinator to be less useful.
version 0.6.0.0
- Can now be compiled with the JavaScript backend of the Utrecht Haskell compiler.
- The push-driven implementations needs the
UseExtensions
flag to work. This flag is enabled by default. - Minor module reorganization.
version 0.5.0.0 – announcement
This update includes numerous changes, in particular a complete overhaul of the internal implementation. Here a partial list.
- Add
collect
,spill
andunionWith
combinators to deal with simultaneous events. - Remove general
Monoid
instance forEvent
to simplify reasoning about simultaneous events. - Add
initial
andchanges
combinators that allow you to observe updates toBehavior
. Remove theReactive.Banana.Incremental
module. - Rename most modules,
- Change type signatures: The main types
Event
,Behavior
andNetworkDescription
now carry an additional phantom type.
version 0.4.3.1
- Model implementation of
accumE
now has the intended semantics.
version 0.4.3.0
- Change semantics:
IO
actions from insidereactimate
may now interleave as dictated by your event-based framework (issue #15). - Fix bug: compiling a network twice no longer fails due to lingering global state (issue #16).
- Change type: remove
Typeable
constraint frominterpret
andinterpretAsHandler
. - Misc: Remove the
BlackBoard
application from the repository.
version 0.4.2.0
- Change type: remove
Typeable
constraint fromfromAddHandler
. - Misc: the
Vault
data type gets its own package. - Misc:
reactive-banana-wx
now compiles properly with cabal. - Add some more examples to the
reactive-banana-wx
package.
version 0.4.1.0
- Add
<@>
operator for more convenience when usingapply
. - Add support for value recursion to the
NetworkDescription
monad. - Add many examples to
reactive-banana-wx
.
version 0.4.0.0 – announcement
- Add function
fromPoll
to obtain behaviors from mutable data. - Change name:
run
is now calledactuate
. - Add derived data type
Discrete
. - Add function
interpretAsHandler
.
version 0.3.0.0 – announcement
- change: event networks are now first-class values, you can
pause
orrun
them. - change type:
AddHandler
now expects a way to unregister event handlers. - add example
RunPause.hs
version 0.2.0.0 – announcement
- change: now implements proper semantics as pioneered by Conal Elliott
- model implementation for semantics
- push-driven implementation for efficiency
- add example
SlotMachine.hs
version 0.1.0.0
- initial release