{-# LANGUAGE FlexibleContexts #-}

module Apecs (
  -- * Types
    System(..),
    Component(..), Entity(..), Slice, Has(..), Safe(..), cast,

  -- * Initializable
    initStoreWith,

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

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


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

  -- * Query
    slice, All(..),

  -- * Other
    runSystem, runWith,

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