packages feed

aztecs-0.7.0: src/Aztecs/ECS/System/Dynamic/Reader/Class.hs

{-# LANGUAGE FunctionalDependencies #-}

module Aztecs.ECS.System.Dynamic.Reader.Class (ArrowDynamicReaderSystem (..)) where

import Aztecs.ECS.Component (ComponentID)
import Aztecs.ECS.World.Archetypes (Node)
import Control.Arrow (Arrow (..), (>>>))
import Data.Set (Set)

class (Arrow arr) => ArrowDynamicReaderSystem q arr | arr -> q where
  allDyn :: Set ComponentID -> q i o -> arr i [o]

  filterDyn :: Set ComponentID -> q i o -> (Node -> Bool) -> arr i [o]

  singleDyn :: Set ComponentID -> q () a -> arr () a
  singleDyn cIds q =
    allDyn cIds q
      >>> arr
        ( \as -> case as of
            [a] -> a
            _ -> error "TODO"
        )