diff --git a/apecs-physics/src/Apecs/Physics/Body.hs b/apecs-physics/src/Apecs/Physics/Body.hs index e8bce5f..b585b52 100644 --- a/apecs-physics/src/Apecs/Physics/Body.hs +++ b/apecs-physics/src/Apecs/Physics/Body.hs @@ -18,7 +18,7 @@ module Apecs.Physics.Body where import Apecs import Apecs.Core import Control.Monad -import Control.Monad.IO.Class (liftIO, MonadIO) +import Control.Monad.IO.Class (MonadIO) import qualified Data.IntMap as M import qualified Data.IntSet as S import Data.IORef diff --git a/apecs-physics/src/Apecs/Physics/Collision.hs b/apecs-physics/src/Apecs/Physics/Collision.hs index 49d49e1..bc6c9ab 100644 --- a/apecs-physics/src/Apecs/Physics/Collision.hs +++ b/apecs-physics/src/Apecs/Physics/Collision.hs @@ -22,7 +22,7 @@ module Apecs.Physics.Collision import Apecs import Apecs.Core import Control.Monad -import Control.Monad.IO.Class (MonadIO, liftIO) +import Control.Monad.IO.Class (MonadIO) import qualified Data.IntMap as M import Data.IORef import qualified Data.Vector.Unboxed as U diff --git a/apecs-physics/src/Apecs/Physics/Constraint.hs b/apecs-physics/src/Apecs/Physics/Constraint.hs index 2b6ee10..2994adc 100644 --- a/apecs-physics/src/Apecs/Physics/Constraint.hs +++ b/apecs-physics/src/Apecs/Physics/Constraint.hs @@ -20,7 +20,7 @@ module Apecs.Physics.Constraint import Apecs import Apecs.Core import Control.Monad -import Control.Monad.IO.Class (liftIO, MonadIO) +import Control.Monad.IO.Class (MonadIO) import qualified Data.IntMap as M import qualified Data.IntSet as S import Data.IORef diff --git a/apecs-physics/src/Apecs/Physics/Query.hs b/apecs-physics/src/Apecs/Physics/Query.hs index 4c52f98..971e8d6 100644 --- a/apecs-physics/src/Apecs/Physics/Query.hs +++ b/apecs-physics/src/Apecs/Physics/Query.hs @@ -16,7 +16,7 @@ module Apecs.Physics.Query where import Apecs -import Control.Monad.IO.Class (liftIO, MonadIO) +import Control.Monad.IO.Class (MonadIO) import Foreign.C.Types import Foreign.ForeignPtr (withForeignPtr) import Foreign.Marshal.Alloc diff --git a/apecs-physics/src/Apecs/Physics/Space.hs b/apecs-physics/src/Apecs/Physics/Space.hs index 056a805..31854ce 100644 --- a/apecs-physics/src/Apecs/Physics/Space.hs +++ b/apecs-physics/src/Apecs/Physics/Space.hs @@ -16,7 +16,7 @@ module Apecs.Physics.Space where import Apecs import Apecs.Core -import Control.Monad.IO.Class (liftIO, MonadIO) +import Control.Monad.IO.Class (MonadIO) import Data.IORef import Foreign.Concurrent import Foreign.ForeignPtr (withForeignPtr) diff --git a/apecs/apecs.cabal b/apecs/apecs.cabal index ff5da72..a0c5d63 100644 --- a/apecs/apecs.cabal +++ b/apecs/apecs.cabal @@ -42,10 +42,8 @@ library array >=0.4 && <0.6 , base >=4.9 && <5 , containers >=0.5 && <0.8 - , exceptions >=0.10.0 && <0.11 - , mtl >=2.2 && <2.4 + , transformers >= 0.5 && <0.7 , template-haskell >=2.12 && <3 - , unliftio-core >=0.2.0.1 && <0.3 , vector >=0.11 && <0.14 ghc-options: -Wall diff --git a/apecs/src/Apecs.hs b/apecs/src/Apecs.hs index e098629..9ec8995 100644 --- a/apecs/src/Apecs.hs +++ b/apecs/src/Apecs.hs @@ -4,7 +4,7 @@ It selectively re-exports the user-facing functions from the submodules. -} module Apecs ( -- * Core types - SystemT(..), System, Component(..), Entity(..), Has(..), Not(..), + SystemT, System, Component(..), Entity(..), Has(..), Not(..), Get, Set, Destroy, Members, -- * Stores @@ -30,7 +30,8 @@ module Apecs ( ) where import Control.Monad.IO.Class (liftIO) -import Control.Monad.Reader (ask, asks, lift) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Reader (ask, asks) import Data.Proxy import Apecs.Components diff --git a/apecs/src/Apecs/Core.hs b/apecs/src/Apecs/Core.hs index 41ece6c..5b38d0a 100644 --- a/apecs/src/Apecs/Core.hs +++ b/apecs/src/Apecs/Core.hs @@ -12,10 +12,7 @@ module Apecs.Core where -import Control.Monad.Catch -import Control.Monad.IO.Class -import Control.Monad.IO.Unlift -import Control.Monad.Reader +import Control.Monad.Trans.Reader import qualified Data.Vector.Unboxed as U -- | An Entity is just an integer, used to index into a component store. @@ -30,11 +27,9 @@ newtype Entity = Entity {unEntity :: Int} deriving (Num, Eq, Ord, Show, Enum) -- * Allow type-based lookup of a component's store through @getStore@. -- -- * Lift side effects into their host Monad. -newtype SystemT w m a = SystemT {unSystem :: ReaderT w m a} deriving (Functor, Monad, Applicative, MonadTrans, MonadIO, MonadThrow, MonadCatch, MonadMask, MonadUnliftIO) +type SystemT w m = ReaderT w m type System w = SystemT w IO -deriving instance Monad m => MonadReader w (SystemT w m) - -- | A component is defined by specifying how it is stored. -- The constraint ensures that stores and components are mapped one-to-one. class (Elem (Storage c) ~ c) => Component c where diff --git a/apecs/src/Apecs/Experimental/Reactive.hs b/apecs/src/Apecs/Experimental/Reactive.hs index 8d8b9f2..d0c410c 100644 --- a/apecs/src/Apecs/Experimental/Reactive.hs +++ b/apecs/src/Apecs/Experimental/Reactive.hs @@ -35,7 +35,7 @@ module Apecs.Experimental.Reactive import Control.Monad import Control.Monad.IO.Class -import Control.Monad.Reader +import Control.Monad.Trans.Class (lift) import qualified Data.Array.IO as A import qualified Data.IntMap.Strict as IM import qualified Data.IntSet as S diff --git a/apecs/src/Apecs/Experimental/Stores.hs b/apecs/src/Apecs/Experimental/Stores.hs index a380f7f..0290267 100644 --- a/apecs/src/Apecs/Experimental/Stores.hs +++ b/apecs/src/Apecs/Experimental/Stores.hs @@ -20,7 +20,7 @@ module Apecs.Experimental.Stores ( Pushdown(..), Stack(..) ) where -import Control.Monad.Reader +import Control.Monad.Trans.Reader import Data.Proxy import Data.Semigroup diff --git a/apecs/src/Apecs/Stores.hs b/apecs/src/Apecs/Stores.hs index d9e0be8..43266ad 100644 --- a/apecs/src/Apecs/Stores.hs +++ b/apecs/src/Apecs/Stores.hs @@ -20,7 +20,7 @@ module Apecs.Stores import Control.Monad import Control.Monad.IO.Class -import Control.Monad.Reader +import Control.Monad.Trans.Class (lift) import Data.Bits (shiftL, (.&.)) import qualified Data.IntMap.Strict as M import Data.IORef diff --git a/apecs/src/Apecs/System.hs b/apecs/src/Apecs/System.hs index abe3525..022d54f 100644 --- a/apecs/src/Apecs/System.hs +++ b/apecs/src/Apecs/System.hs @@ -7,7 +7,8 @@ module Apecs.System where import Control.Monad -import Control.Monad.Reader +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Reader import Data.Proxy import qualified Data.Vector.Unboxed as U @@ -17,7 +18,7 @@ import Apecs.Core -- | Run a system in a game world {-# INLINE runSystem #-} runSystem :: SystemT w m a -> w -> m a -runSystem sys = runReaderT (unSystem sys) +runSystem = runReaderT -- | Run a system in a game world {-# INLINE runWith #-} diff --git a/apecs/src/Apecs/TH.hs b/apecs/src/Apecs/TH.hs index 447975f..b4674fc 100644 --- a/apecs/src/Apecs/TH.hs +++ b/apecs/src/Apecs/TH.hs @@ -11,7 +11,7 @@ module Apecs.TH ) where import Control.Monad (filterM) -import Control.Monad.Reader (asks) +import Control.Monad.Trans.Reader (asks) import Data.Traversable (for) import Language.Haskell.TH @@ -50,7 +50,7 @@ makeWorldNoEC worldName cTypes = do | (j,_) <- enumerate cTypes ] [d| instance Monad m => Has $(conT world) m $(conT t) where - getStore = let field $pat = $(varE x) in SystemT (asks field) + getStore = let field $pat = $(varE x) in asks field |] -- Destructible type synonym diff --git a/apecs/src/Apecs/Util.hs b/apecs/src/Apecs/Util.hs index 92a9023..79a8d58 100644 --- a/apecs/src/Apecs/Util.hs +++ b/apecs/src/Apecs/Util.hs @@ -18,7 +18,7 @@ module Apecs.Util ( import Control.Applicative (liftA2) import Control.Monad.IO.Class -import Control.Monad.Reader +import Control.Monad.Trans.Class (lift) import Data.Monoid import Data.Semigroup import System.Mem (performMajorGC)