@hackage eve0.1.2

An extensible event framework

Eve

[![Join the chat at https://gitter.im/eve-framework/Lobby](https://badges.gitter.im/eve-framework/Lobby.svg)](https://gitter.im/eve-framework/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Hackage

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

Documentation

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:

Pros

  • 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.

Cons

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

Contributing

Installation

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

Contributions

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