{-
    Session.hs
        Copyright 2008 Matthew Sackman <matthew@wellquite.org>

    This file is part of Session Types for Haskell.

    Session Types for Haskell is free software: you can redistribute it
    and/or modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation, either version 3 of
    the License, or (at your option) any later version.

    Session Types for Haskell is distributed in the hope that it will
    be useful, but WITHOUT ANY WARRANTY; without even the implied
    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    See the GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Session Types for Haskell.
    If not, see <http://www.gnu.org/licenses/>.
-}

-- | This is just a convenience module that reexports everything
-- you're expected to need.
module Control.Concurrent.Session

    ( True (..)
    , False (..)

    , OfferImpls (OfferImplsNil)
    , (~||~)
    , sjump
    , soffer
    , sselect
    , ssend
    , srecv
    , run

    , End ()
    , Send (..)
    , Recv (..)
    , sendPid
    , recvPid
    , Jump ()
    , Select ()
    , Offer ()
    , jump
    , end
    , select
    , offer
    , Dual (..)
    , (~>)
    , (~|~)
    , SWellFormedConfig
    , testWellformed
    , SessionChain

    , Cons ()
    , cons
    , Nil ()
    , nil

    , E (..)
    , D0 (..)
    , D1 (..)
    , D2 (..)
    , D3 (..)
    , D4 (..)
    , D5 (..)
    , D6 (..)
    , D7 (..)
    , D8 (..)
    , D9 (..)

    , module Control.Concurrent.Session.SMonad

    , emptyMap

    , Pid ()
    , InterleavedChain ()
    , CreateSession (..)
    , myPid
    , PidEq (..)
    , MultiReceive (MultiReceiveNil)
    , (~|||~)
    , multiReceive

    , module Control.Concurrent.Session.Interleaving

    ) where

import Control.Concurrent.Session.Bool
import Control.Concurrent.Session.Runtime
import Control.Concurrent.Session.SessionType
import Control.Concurrent.Session.List
import Control.Concurrent.Session.Number
import Control.Concurrent.Session.SMonad
import Control.Concurrent.Session.Map
import Control.Concurrent.Session.Pid
import Control.Concurrent.Session.Interleaving