module Aztecs.ECS.Bundle (Bundle (..)) where
newtype Bundle e m = Bundle {forall e (m :: * -> *). Bundle e m -> e -> m ()
runBundle :: e -> m ()}
instance (Monad m) => Semigroup (Bundle e m) where
Bundle e -> m ()
f <> :: Bundle e m -> Bundle e m -> Bundle e m
<> Bundle e -> m ()
g = (e -> m ()) -> Bundle e m
forall e (m :: * -> *). (e -> m ()) -> Bundle e m
Bundle ((e -> m ()) -> Bundle e m) -> (e -> m ()) -> Bundle e m
forall a b. (a -> b) -> a -> b
$ \e
entity -> e -> m ()
f e
entity m () -> m () -> m ()
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> e -> m ()
g e
entity
{-# INLINE (<>) #-}
instance (Monad m) => Monoid (Bundle e m) where
mempty :: Bundle e m
mempty = (e -> m ()) -> Bundle e m
forall e (m :: * -> *). (e -> m ()) -> Bundle e m
Bundle ((e -> m ()) -> Bundle e m) -> (e -> m ()) -> Bundle e m
forall a b. (a -> b) -> a -> b
$ \e
_ -> () -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
{-# INLINE mempty #-}