-- | This module exports functions, types, and typeclasses necessary for
-- implementing a custom effect and/or effect handler.
--

module Control.Eff.Extend
  ( -- * The effect monad
    Eff(..)
  , run
    -- * Open Unions
  , OpenUnion.Union
  , OpenUnion.Member
  , inj
  , prj
  , decomp
  , SetMember
  , weaken
  -- * Helper functions that are used for implementing effect-handlers
  , handle_relay
  , handle_relay_s
  , interpose
  , raise
  , send
  -- * Arrow types and compositions
  , Arr
  , Arrs
  , first
  , singleK
  , qApp
  , (^$)
  , arr
  , ident
  , comp
  , (^|>)
  , qComp
  , qComps
  )
where

import           Data.OpenUnion                as OpenUnion
import           Control.Eff.Internal