{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} module Aztecs.ECS.System where import Aztecs.ECS.Access.Internal import Aztecs.ECS.Class class System m sys where type SystemIn m sys runSystem :: sys -> SystemIn m sys -> m () system :: ( ECS m, Monad m, System (Task m) sys, Access m (SystemIn (Task m) sys) ) => sys -> m () system :: forall (m :: * -> *) sys. (ECS m, Monad m, System (Task m) sys, Access m (SystemIn (Task m) sys)) => sys -> m () system sys sys = m (SystemIn (Task m) sys) forall (m :: * -> *) a. Access m a => m a access m (SystemIn (Task m) sys) -> (SystemIn (Task m) sys -> m ()) -> m () forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Task m () -> m () forall a. Task m a -> m a forall (m :: * -> *) a. ECS m => Task m a -> m a task (Task m () -> m ()) -> (SystemIn (Task m) sys -> Task m ()) -> SystemIn (Task m) sys -> m () forall b c a. (b -> c) -> (a -> b) -> a -> c . sys -> SystemIn (Task m) sys -> Task m () forall (m :: * -> *) sys. System m sys => sys -> SystemIn m sys -> m () runSystem sys sys {-# INLINE system #-}