module Mischief.ECS.Components.HooksDef where

import Data.Data
import Mischief.ECS.EventDef

data ErasedHook c where
  ErasedHook :: forall e c m. (Event (e c), Typeable m) => (e c -> m ()) -> ErasedHook c

newtype Hooks c = Hooks [ErasedHook c] deriving newtype (NonEmpty (Hooks c) -> Hooks c
Hooks c -> Hooks c -> Hooks c
(Hooks c -> Hooks c -> Hooks c)
-> (NonEmpty (Hooks c) -> Hooks c)
-> (forall b. Integral b => b -> Hooks c -> Hooks c)
-> Semigroup (Hooks c)
forall b. Integral b => b -> Hooks c -> Hooks c
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall k (c :: k). NonEmpty (Hooks c) -> Hooks c
forall k (c :: k). Hooks c -> Hooks c -> Hooks c
forall k (c :: k) b. Integral b => b -> Hooks c -> Hooks c
$c<> :: forall k (c :: k). Hooks c -> Hooks c -> Hooks c
<> :: Hooks c -> Hooks c -> Hooks c
$csconcat :: forall k (c :: k). NonEmpty (Hooks c) -> Hooks c
sconcat :: NonEmpty (Hooks c) -> Hooks c
$cstimes :: forall k (c :: k) b. Integral b => b -> Hooks c -> Hooks c
stimes :: forall b. Integral b => b -> Hooks c -> Hooks c
Semigroup)