module Mischief.ECS.Utils where import Data.Data import Data.Foldable import Data.Kind import Data.Maybe import GHC.Stack class GetRep t where getRep :: t -> TypeRep findM :: forall (m :: Type -> Type) a t. (Monad m, Foldable t) => (a -> m Bool) -> t a -> m (Maybe a) findM :: forall (m :: * -> *) a (t :: * -> *). (Monad m, Foldable t) => (a -> m Bool) -> t a -> m (Maybe a) findM a -> m Bool f t a l = (a -> m Bool) -> [a] -> m (Maybe a) forall {f :: * -> *} {a}. Monad f => (a -> f Bool) -> [a] -> f (Maybe a) f' a -> m Bool f (t a -> [a] forall a. t a -> [a] forall (t :: * -> *) a. Foldable t => t a -> [a] toList t a l) where f' :: (a -> f Bool) -> [a] -> f (Maybe a) f' a -> f Bool _ [] = Maybe a -> f (Maybe a) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure Maybe a forall a. Maybe a Nothing f' a -> f Bool f (a x : [a] xs) = do b <- a -> f Bool f a x if b then pure $ Just x else findM f xs unwrap :: (HasCallStack) => Maybe a -> a unwrap :: forall a. HasCallStack => Maybe a -> a unwrap = (HasCallStack => Maybe a -> a) -> Maybe a -> a forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack ((HasCallStack => Maybe a -> a) -> Maybe a -> a) -> (HasCallStack => Maybe a -> a) -> Maybe a -> a forall a b. (a -> b) -> a -> b $ a -> Maybe a -> a forall a. a -> Maybe a -> a fromMaybe a forall a. HasCallStack => a undefined (>>+) :: forall (m :: Type -> Type) a b. (Monad m) => m a -> (a -> m b) -> m a >>+ :: forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m a (>>+) m a a a -> m b f = m a a m a -> (a -> m b) -> m b forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= a -> m b f m b -> (b -> m a) -> m a forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= m a -> b -> m a forall a b. a -> b -> a const m a a