{-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-} module Aztecs.ECS.Query where import Data.Maybe newtype Query a = Query {forall a. Query a -> [Maybe a] unQuery :: [Maybe a]} deriving ((forall a b. (a -> b) -> Query a -> Query b) -> (forall a b. a -> Query b -> Query a) -> Functor Query forall a b. a -> Query b -> Query a forall a b. (a -> b) -> Query a -> Query b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f $cfmap :: forall a b. (a -> b) -> Query a -> Query b fmap :: forall a b. (a -> b) -> Query a -> Query b $c<$ :: forall a b. a -> Query b -> Query a <$ :: forall a b. a -> Query b -> Query a Functor, (forall m. Monoid m => Query m -> m) -> (forall m a. Monoid m => (a -> m) -> Query a -> m) -> (forall m a. Monoid m => (a -> m) -> Query a -> m) -> (forall a b. (a -> b -> b) -> b -> Query a -> b) -> (forall a b. (a -> b -> b) -> b -> Query a -> b) -> (forall b a. (b -> a -> b) -> b -> Query a -> b) -> (forall b a. (b -> a -> b) -> b -> Query a -> b) -> (forall a. (a -> a -> a) -> Query a -> a) -> (forall a. (a -> a -> a) -> Query a -> a) -> (forall a. Query a -> [a]) -> (forall a. Query a -> Bool) -> (forall a. Query a -> Int) -> (forall a. Eq a => a -> Query a -> Bool) -> (forall a. Ord a => Query a -> a) -> (forall a. Ord a => Query a -> a) -> (forall a. Num a => Query a -> a) -> (forall a. Num a => Query a -> a) -> Foldable Query forall a. Eq a => a -> Query a -> Bool forall a. Num a => Query a -> a forall a. Ord a => Query a -> a forall m. Monoid m => Query m -> m forall a. Query a -> Bool forall a. Query a -> Int forall a. Query a -> [a] forall a. (a -> a -> a) -> Query a -> a forall m a. Monoid m => (a -> m) -> Query a -> m forall b a. (b -> a -> b) -> b -> Query a -> b forall a b. (a -> b -> b) -> b -> Query a -> b forall (t :: * -> *). (forall m. Monoid m => t m -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. t a -> [a]) -> (forall a. t a -> Bool) -> (forall a. t a -> Int) -> (forall a. Eq a => a -> t a -> Bool) -> (forall a. Ord a => t a -> a) -> (forall a. Ord a => t a -> a) -> (forall a. Num a => t a -> a) -> (forall a. Num a => t a -> a) -> Foldable t $cfold :: forall m. Monoid m => Query m -> m fold :: forall m. Monoid m => Query m -> m $cfoldMap :: forall m a. Monoid m => (a -> m) -> Query a -> m foldMap :: forall m a. Monoid m => (a -> m) -> Query a -> m $cfoldMap' :: forall m a. Monoid m => (a -> m) -> Query a -> m foldMap' :: forall m a. Monoid m => (a -> m) -> Query a -> m $cfoldr :: forall a b. (a -> b -> b) -> b -> Query a -> b foldr :: forall a b. (a -> b -> b) -> b -> Query a -> b $cfoldr' :: forall a b. (a -> b -> b) -> b -> Query a -> b foldr' :: forall a b. (a -> b -> b) -> b -> Query a -> b $cfoldl :: forall b a. (b -> a -> b) -> b -> Query a -> b foldl :: forall b a. (b -> a -> b) -> b -> Query a -> b $cfoldl' :: forall b a. (b -> a -> b) -> b -> Query a -> b foldl' :: forall b a. (b -> a -> b) -> b -> Query a -> b $cfoldr1 :: forall a. (a -> a -> a) -> Query a -> a foldr1 :: forall a. (a -> a -> a) -> Query a -> a $cfoldl1 :: forall a. (a -> a -> a) -> Query a -> a foldl1 :: forall a. (a -> a -> a) -> Query a -> a $ctoList :: forall a. Query a -> [a] toList :: forall a. Query a -> [a] $cnull :: forall a. Query a -> Bool null :: forall a. Query a -> Bool $clength :: forall a. Query a -> Int length :: forall a. Query a -> Int $celem :: forall a. Eq a => a -> Query a -> Bool elem :: forall a. Eq a => a -> Query a -> Bool $cmaximum :: forall a. Ord a => Query a -> a maximum :: forall a. Ord a => Query a -> a $cminimum :: forall a. Ord a => Query a -> a minimum :: forall a. Ord a => Query a -> a $csum :: forall a. Num a => Query a -> a sum :: forall a. Num a => Query a -> a $cproduct :: forall a. Num a => Query a -> a product :: forall a. Num a => Query a -> a Foldable) instance Applicative Query where pure :: forall a. a -> Query a pure a x = [Maybe a] -> Query a forall a. [Maybe a] -> Query a Query [a -> Maybe a forall a. a -> Maybe a Just a x] {-# INLINE pure #-} Query [Maybe (a -> b)] f <*> :: forall a b. Query (a -> b) -> Query a -> Query b <*> Query [Maybe a] x = [Maybe b] -> Query b forall a. [Maybe a] -> Query a Query ([Maybe b] -> Query b) -> [Maybe b] -> Query b forall a b. (a -> b) -> a -> b $ (Maybe (a -> b) -> Maybe a -> Maybe b) -> [Maybe (a -> b)] -> [Maybe a] -> [Maybe b] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith Maybe (a -> b) -> Maybe a -> Maybe b forall a b. Maybe (a -> b) -> Maybe a -> Maybe b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b (<*>) [Maybe (a -> b)] f [Maybe a] x {-# INLINE (<*>) #-} runQuery :: Query a -> [a] runQuery :: forall a. Query a -> [a] runQuery (Query [Maybe a] q) = [Maybe a] -> [a] forall a. [Maybe a] -> [a] catMaybes [Maybe a] q {-# INLINE runQuery #-}