Sodium Reactive Programming (FRP) System

Version on this page:
LTS Haskell 6.35:
Stackage Nightly 2016-05-25:
Latest on Hackage:

See all snapshots sodium appears in

BSD3 licensed by Stephen Blackheath
Maintained by Stephen Blackheath

Module documentation for

A general purpose Reactive Programming (FRP) system. This is part of a project to implement reactive libraries with similar interfaces across a range of programming languages at

  • Goals include simplicity and completeness.

  • Applicative style: Event implements Functor and Behaviour implements Applicative.

  • Instead of the common approach where inputs are fed into the front of a monolithic 'reactimate', Sodium allows you to push inputs in from scattered places in IO.

  • Integration with IO: Extensible to provide lots of scope for lifting IO into FRP logic.

  • Push-based imperative implementation.

See the examples directory for test cases and examples.


  • - Fix some value recursion deadlocks and improve docs;

  • - Add mergeWith, make cross asynchronous;

  • - API revamp to remove an excess type variable. Parallelism stuff to be rethought;

  • - Improved tests cases + add Freecell example, API tweaks;

  • - Internal improvements;

  • - Fix multiple memory leaks;

  • 0.6 - Minor API changes, particular with accum;

  • - ghc-7.8 compatibility;

  • - Fix memory leak - see memory-test-8 & memory-test-8a;

  • - Add split primitive.

  • - Add executeIO primitive.

  • - Rename changes to updates. Rename values to value.

  • - Add Monoid instance to Event - thanks Finlay Thompson.

  • - Fix finalizer issue that caused breakage in ghc-7.8 - thanks Luite Stegeman.

  • - Second attempt.

  • - Make merge left-biased, like Reactive Banana.

  • - Fix regression when using in ghc-7.8: prevent keepAlive from being GC'd early

  • - Thank you Samuel GĂ©lineau. Fix breakage in

Depends on 3 packages:
Used by 3 packages:
comments powered byDisqus