packages feed

aztecs-0.14.0: src/Aztecs/ECS/System.hs

{-# 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 sys = access >>= task . runSystem sys
{-# INLINE system #-}