{-|
This module forms the apecs Prelude.
It selectively re-exports the user-facing functions from the submodules.
-}
module Apecs (
  -- * Types
    System(..),
    Component(..), Entity(..), Slice, Has(..), Safe(..), cast,
    Map, Set, Unique, Global, Flag(..),


  -- * Initializable
    initStoreWith,

  -- ** HasMembers wrapper functions
    destroy, exists, owners, resetStore,

  -- ** Store wrapper functions
    get, set, set', modify,
    cmap, cmapM, cmapM_, cimapM, cimapM_,
    rmap', rmap, wmap, wmap', cmap',


  -- ** GlobalRW wrapper functions
    readGlobal, writeGlobal, modifyGlobal,

  -- * Other
    runSystem, runWith,
    initStore, runGC, EntityCounter, initCounter, newEntity,

  -- All slice functions
  module SL,

  -- Reader
  asks, ask, liftIO, lift,
) where

import Control.Monad.Reader (asks, ask, liftIO, lift)

import Apecs.Types
import Apecs.System
import Apecs.Slice as SL
import Apecs.Stores
import Apecs.Util