eve: An extensible event framework

[ bsd3, framework, library ] [ Propose Tags ]

An extensible event-driven application framework in haskell for building embarassingly modular software.

[Skip to Readme]
Versions [faq] 0.1.0, 0.1.1, 0.1.2, 0.1.6, 0.1.7, 0.1.8
Dependencies base (>=4.8 && <4.10), containers (<0.6), data-default (<0.8), free (<4.13), lens (<4.16), mtl (<2.3), pipes (<4.4), pipes-concurrency (<2.1), pipes-parse (<3.1) [details]
License BSD-3-Clause
Copyright 2017 Chris Penner
Author Chris Penner
Maintainer christopher.penner@gmail.com
Revised Revision 1 made by HerbertValerioRiedel at 2017-03-16T21:30:24Z
Category Web
Home page https://github.com/ChrisPenner/eve#readme
Source repo head: git clone https://github.com/ChrisPenner/eve
Uploaded by ChrisPenner at 2017-03-07T18:09:03Z
Distributions NixOS:0.1.8
Downloads 3933 total (28 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2017-03-07 [all 1 reports]




Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees

Readme for eve-0.1.2

[back to package description]


Join the chat at <a href="https://gitter.im/eve-framework/Lobby">https://gitter.im/eve-framework/Lobby</a> Hackage

An extensible event-driven application framework in haskell for building embarassingly modular software.


You can find hackage documentation for eve HERE

Getting started

Building an App in Eve

^ That guide will bring you through the process of making your first app!

If you have any issues (and I'm sure there'll be a few; it's a new project!) please report them here.

Core Principles

Eve's core principle is making it easy to build programs in a modular way. There are two key concepts in Eve which you should be aware of:

  • Events
  • State

Eve provides many useful combinators for dispatching events and adding listeners to events, events are a broad concept in Eve and can be triggered by user-interaction, file-changes, even network sockets! Anything you can think of really! Each time an event is fired, your app 'reacts' by running any associated listeners on the given event. This is quite similar to other event systems so far; however Eve does a few things differently. This is where the 'State' concept comes in. When writing an App, or an extension for an App, in Eve, you can specify a state object which you'd like Eve to keep track of for you, you can run monadic actions over this state and do whatever you want with it. You can even expose your state-changing combinators to other extensions to allow them to change the state too! Another nifty thing is that events can be dispatched on different levels; so for instance in the Rasa text editor which is built using Eve, there's the notion of 'Global Events' and 'Buffer Events'. A 'Buffer' is a State object they've defined, and they added the HasEvents typeclass to it, which now allows them to register listeners and dispatch events to a specific instance of a buffer! Trackable states (and therefore state-level event listeners) can be nested several levels deep without issue. Unlike most event systems, Eve also allows Monoidal return values from event listeners, so you can collect 'responses' from each event you fire if you wish.

When designing applications in Eve; it's crucial to think about how the state of you application will be stored, and how different components interact. Eve works best when components are separated and communicate with each-other through events. This is because it allows those who will eventually write extensions to your application to 'hook' into those events to add functionality.

There are some definite Pros and Cons to Eve's approach:


  • Implementing most core functionality as extensions ensures a powerful and elegant extension interface.
  • Flexibility & Adaptability; applications can be written in such a way that users can replace entire components with alternate versions.


  • Module cross-dependencies makes the community infrastructure more fragile,
  • This architecture takes some getting used-to.



Eve uses Stack for reproducible builds.

  1. Install stack
  2. Clone this repo and cd into the directory
  3. Run stack build

Running Tests

  • stack test


Chatting about features is a key part of Eve's development; come join us in the Chat Room to discuss features or improvements!