{-# 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 Set ComponentID cIds q () a q = Set ComponentID -> q () a -> arr () [a] forall i o. Set ComponentID -> q i o -> arr i [o] forall (q :: * -> * -> *) (arr :: * -> * -> *) i o. ArrowDynamicReaderSystem q arr => Set ComponentID -> q i o -> arr i [o] allDyn Set ComponentID cIds q () a q arr () [a] -> arr [a] a -> arr () a forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c >>> ([a] -> a) -> arr [a] a forall b c. (b -> c) -> arr b c forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c arr ( \[a] as -> case [a] as of [a a] -> a a [a] _ -> [Char] -> a forall a. HasCallStack => [Char] -> a error [Char] "TODO" )