Skip to content
Keera Hails: Haskell on Rails - Reactive Programming Framework for Interactive Haskell applications
Branch: develop
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.cabal-conf Decrypt. Updates encrypted config. May 1, 2017
demos Add demo showing how to make an RV sink from an MSF. Refs #11. Apr 13, 2019
keera-hails-i18n Updates domain name Jun 3, 2017
keera-hails-mvc-controller Updates domain name Jun 3, 2017
keera-hails-mvc-environment-gtk Updates domain name Jun 3, 2017
keera-hails-mvc-model-lightmodel Updates domain name Jun 3, 2017
keera-hails-mvc-model-protectedmodel Updates domain name Jun 3, 2017
keera-hails-mvc-solutions-config Updates domain name Jun 3, 2017
keera-hails-mvc-solutions-gtk Updates domain name Jun 3, 2017
keera-hails-mvc-view-gtk Updates domain name Jun 3, 2017
keera-hails-mvc-view Updates domain name Jun 3, 2017
keera-hails-reactive-fs Updates domain name Jun 3, 2017
keera-hails-reactive-gtk Merge branch 'master' into develop. Jul 25, 2019
keera-hails-reactive-gtk3 Updates domain name Jun 3, 2017
keera-hails-reactive-htmldom HLint and haddock coverage Jun 2, 2017
keera-hails-reactive-network Remove bounds on network package. Refs #18. Jul 27, 2019
keera-hails-reactive-polling Updates domain name Jun 3, 2017
keera-hails-reactive-qt Updates domain name Jun 3, 2017
keera-hails-reactive-wx Updates domain name Jun 3, 2017
keera-hails-reactive-yampa Updates domain name Jun 3, 2017
keera-hails-reactivelenses Updates domain name Jun 3, 2017
keera-hails-reactivevalues Merge branch 'master' into develop. Jul 25, 2019
keera-hails-templates Updates domain name Jun 3, 2017
keera-hails Updates domain name Jun 3, 2017
.gitignore Renames cabal config file. Bumps package versions to force uploads. May 1, 2017
.hackage List of packages on hackage (for easy uploading using scripts) Nov 6, 2015
.hgignore Initial import of an empty gtk program Aug 1, 2011
.travis.yml Drop support for GHC 7.8. Refs #18. Jul 27, 2019 iOS is now supported. May 25, 2017

Keera Hails

Build Status

Keera Hails is a toolkit to create Reactive Applications in Haskell. It facilitates combining User Interfaces, external devices, networks connections, files and, optionally, FRP networks.

Keera Hails is modular and extensible. It is cross platform (Windows, Linux, MacOSX, iOS, Android, GHCJS), UI-agnostic (Gtk+, WX, Qt, iOS native UIs, Android Native toolkit, HTML DOM), FRP-agnostic and device-agnostic (Wiimote, Webcams, etc).

Keera Hails has been used to create large applications and is used commercially in production.

The toolkit is divided in three parts:

  • Reactive Values: they are typed mutable values with event dispatching and access properties. They can be modified by lifting functions and applying lenses to them. They can also be connected so that they stay in sync during program execution.

  • Reactive bindings: Widget properties/attributes can be seen as reactive values. So can network sockets, files, application models ('model' as in MVC) and external resources (polling). Uni-directional, Functional Reactive Programming signal functions can also be wrapped into a pair of RVs (see Yampa). The idea is that, at the highest application level (controller), each layer is wrapped in a reactive container and connected to others.

    Backends for iOS and Android (using each platform's native UI toolkits) are also available. Samples can be found here and here. Please contact Keera Studios if you wish to use them.

  • MVC Architecture

    MVC is easily applied using hails. There are two easy ways of wraping pure models into RVs, depending on the level of change detection we need to detect and optimise.

    A pair Model-View, often needed by the controller, can be wrapped in an environment. The following packages implement a Gtk View and a Gtk environment.

    The following packages generate default project skeletons that do "the right thing" (currently for Gtk+ only). The application takes the approach of "convention over configuration": certain modules will be expected to have predetermined names. If this is much of a problem, open a bug report.

  • Applications can be simplified further. The following packages implement Gtk-based choreographies (M-V synchronizations and controller rule templates) and address other common features needed in applications.

Tutorials, papers and publications

For bibtex references to these articles, see Publications in

Applications and demos


I would like to thank the following people for fruitful discussions and collaborations.

  • Henrik Nilsson
  • Hamish Mackenzie (for helping me create the first GHCJS backend for Hails, and for Gtk2hs).
  • Leuite Stegeman (for helping me create the first GHCJS backend for Hails).
  • Guerric Chupin (for continuing this work and writing Arpeggigon).
  • Arsen Kostenko
  • Emilio Gallego
  • Paolo Capriotti
  • Florent Ballestrieri
  • David McGillicuddy
  • Philip Holzenspies
  • Ian-Woo Kim
  • Atze van der Ploeg
  • Simon Peyton Jones
  • Michał Gajda
  • I thank the audiences of the following talks on Reactive programming and Hails, for patientily listening to me complain about the state of the world and commenting on my work.
    • Haskell Symposium (2015), Vancouver, colocated with ICFP.
    • London (2014), Haskell Meetup
    • Nottingham (2014), FPLAD.
    • TFP (2014)
    • FPLab, Nottingham (2013)
    • CAES Group, UTwente (2013)
    • Babel Research Group, UPM (2010)

(Note: these people do not necessarily support anything I have to say.)

You can’t perform that action at this time.