{-----------------------------------------------------------------------------
    reactive-banana
------------------------------------------------------------------------------}

module Reactive.Banana (
    -- * Synopsis
    -- | Reactive-banana is a library for functional reactive programming (FRP).
    -- To use it, import this module:
    --
    -- > import Reactive.Banana

    -- * Overview
    -- $intro

    -- * Exports
    module Reactive.Banana.Combinators,
    compile,
    ) where

import Reactive.Banana.Combinators
import Reactive.Banana.Frameworks
import Reactive.Banana.Types

{-$intro

The module "Reactive.Banana.Combinators" collects the key types
and concepts of FRP. You will spend most of your time with this module.

The module "Reactive.Banana.Model" is /not/ used in practice.
It contains an easy-to-understand model re-implementation of the FRP API.
This is useful for learning FRP and for internal testing purposes.

The module "Reactive.Banana.Frameworks" allows you to connect
the FRP types and combinators to the outside world (IO).
If you are /using/ an existing binding like reactive-banana-wx,
then you probably won't need this module very often.
On the other hand, if you are /writing/ a binding to an external
library, then you will definitely need this.

The module hierarchy at "Reactive.Banana.Prim"
implements the efficient low-level FRP engine that powers the rest of the library.
This is only useful if you want to implement your own FRP library.

-}