Minimal and elegant functional reactive programming library for Haskell

Get started

Description

Callback heaven

for modern interactive apps

Core FRP library

Solid FRP library for your next project

Create Games

Even more declarative gloss graphics on top of Open GL

Make TUIs

Terminal interactive apps with great brick library

Easy to use and extend

Key features

Powerful and elegant interface The core of the library is based on simple idea that event stream is a callback consumer function. We define the events not in terms of what it is but in terms of what we want to do with it. If we give a callback function to it it will make something useful with it when event will happen. The dynamic values are observers of the values that happen on imperative streams. A dynamic value is a snapshot of last value that has happened onthe stream.

Efficient implementation It turns out that with imperative definition we can implement in efficient way the whole set of combinators thaw we expect from FRP library. The implementation is based on battle tested libraries such as async-lifted and lifted-base. All events happen concurrently and update happens in mutable variables which prevents the system from space leaks.

Generic implementation The event streams and dynamic values are parametrized by the context of the core monad which gives us opportunity to easily extend the core functions with custom contexts suitable for specific applications. It’s a breeze to take some imperative library and make FRP-style support for it.

Batteries included Besides the core library we have implemented libraries that unfold the FRP wings for several great libraries such as gloss (to make animations and games) and brick (to make TUIs). Also we can take them as examples on how to implement our own bindings to our favorite libraries.