{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FunctionalDependencies #-}
module Aztecs.ECS.System.Reader.Class (ArrowReaderSystem (..)) where
import Aztecs.ECS.Query.Reader (QueryFilter (..))
import Control.Arrow (Arrow (..), (>>>))
import Prelude hiding (all, any, filter, id, lookup, map, mapM, reads, (.))
class (Arrow arr) => ArrowReaderSystem q arr | arr -> q where
all :: q i a -> arr i [a]
filter :: q () a -> QueryFilter -> arr () [a]
single :: q i a -> arr i a
single q i a
q =
q i a -> arr i [a]
forall i a. q i a -> arr i [a]
forall (q :: * -> * -> *) (arr :: * -> * -> *) i a.
ArrowReaderSystem q arr =>
q i a -> arr i [a]
all q i a
q
arr i [a] -> arr [a] a -> arr i 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"
)