{-# LANGUAGE AllowAmbiguousTypes #-}

module Mischief.ECS.Components.Required (require, requireAll, toBundleElement) where

import Data.Data
import Data.Default
import Data.Set (Set)
import Data.Set qualified as Set
import Mischief.ECS.Components

class RequiredBundle b where
  defaultBundleData :: Proxy b -> Set DefaultComponentType

instance RequiredBundle () where
  defaultBundleData :: Proxy () -> Set DefaultComponentType
  defaultBundleData :: Proxy () -> Set DefaultComponentType
defaultBundleData Proxy ()
_ = Set DefaultComponentType
forall a. Set a
Set.empty

instance {-# OVERLAPPABLE #-} (Component c, Default c) => RequiredBundle c where
  defaultBundleData :: Proxy c -> Set DefaultComponentType
  defaultBundleData :: Proxy c -> Set DefaultComponentType
defaultBundleData Proxy c
_ = DefaultComponentType -> Set DefaultComponentType
forall a. a -> Set a
Set.singleton (DefaultComponentType -> Set DefaultComponentType)
-> DefaultComponentType -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ Proxy c -> DefaultComponentType
forall c.
(Component c, Default c) =>
Proxy c -> DefaultComponentType
DefaultComponentType (Proxy c -> DefaultComponentType)
-> Proxy c -> DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @c

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1) => RequiredBundle (b0, b1) where
  defaultBundleData :: Proxy (b0, b1) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2) => RequiredBundle (b0, b1, b2) where
  defaultBundleData :: Proxy (b0, b1, b2) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3) => RequiredBundle (b0, b1, b2, b3) where
  defaultBundleData :: Proxy (b0, b1, b2, b3) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4) => RequiredBundle (b0, b1, b2, b3, b4) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5) => RequiredBundle (b0, b1, b2, b3, b4, b5) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7) -> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8)
-> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8, RequiredBundle b9) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
-> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8, Proxy b9 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b9 -> Set DefaultComponentType)
-> Proxy b9 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b9]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8, RequiredBundle b9, RequiredBundle b10) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10)
-> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8, Proxy b9 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b9 -> Set DefaultComponentType)
-> Proxy b9 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b9, Proxy b10 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b10 -> Set DefaultComponentType)
-> Proxy b10 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b10]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8, RequiredBundle b9, RequiredBundle b10, RequiredBundle b11) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11)
-> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8, Proxy b9 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b9 -> Set DefaultComponentType)
-> Proxy b9 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b9, Proxy b10 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b10 -> Set DefaultComponentType)
-> Proxy b10 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b10, Proxy b11 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b11 -> Set DefaultComponentType)
-> Proxy b11 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b11]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8, RequiredBundle b9, RequiredBundle b10, RequiredBundle b11, RequiredBundle b12) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12)
-> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8, Proxy b9 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b9 -> Set DefaultComponentType)
-> Proxy b9 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b9, Proxy b10 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b10 -> Set DefaultComponentType)
-> Proxy b10 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b10, Proxy b11 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b11 -> Set DefaultComponentType)
-> Proxy b11 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b11, Proxy b12 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b12 -> Set DefaultComponentType)
-> Proxy b12 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b12]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8, RequiredBundle b9, RequiredBundle b10, RequiredBundle b11, RequiredBundle b12, RequiredBundle b13) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13) where
  defaultBundleData :: Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13)
-> Set DefaultComponentType
defaultBundleData Proxy (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8, Proxy b9 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b9 -> Set DefaultComponentType)
-> Proxy b9 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b9, Proxy b10 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b10 -> Set DefaultComponentType)
-> Proxy b10 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b10, Proxy b11 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b11 -> Set DefaultComponentType)
-> Proxy b11 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b11, Proxy b12 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b12 -> Set DefaultComponentType)
-> Proxy b12 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b12, Proxy b13 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b13 -> Set DefaultComponentType)
-> Proxy b13 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b13]

instance {-# OVERLAPPING #-} (RequiredBundle b0, RequiredBundle b1, RequiredBundle b2, RequiredBundle b3, RequiredBundle b4, RequiredBundle b5, RequiredBundle b6, RequiredBundle b7, RequiredBundle b8, RequiredBundle b9, RequiredBundle b10, RequiredBundle b11, RequiredBundle b12, RequiredBundle b13, RequiredBundle b14) => RequiredBundle (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14) where
  defaultBundleData :: Proxy
  (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14)
-> Set DefaultComponentType
defaultBundleData Proxy
  (b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14)
_ = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Proxy b0 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b0 -> Set DefaultComponentType)
-> Proxy b0 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b0, Proxy b1 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b1 -> Set DefaultComponentType)
-> Proxy b1 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b1, Proxy b2 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b2 -> Set DefaultComponentType)
-> Proxy b2 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b2, Proxy b3 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b3 -> Set DefaultComponentType)
-> Proxy b3 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b3, Proxy b4 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b4 -> Set DefaultComponentType)
-> Proxy b4 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b4, Proxy b5 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b5 -> Set DefaultComponentType)
-> Proxy b5 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b5, Proxy b6 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b6 -> Set DefaultComponentType)
-> Proxy b6 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b6, Proxy b7 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b7 -> Set DefaultComponentType)
-> Proxy b7 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b7, Proxy b8 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b8 -> Set DefaultComponentType)
-> Proxy b8 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b8, Proxy b9 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b9 -> Set DefaultComponentType)
-> Proxy b9 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b9, Proxy b10 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b10 -> Set DefaultComponentType)
-> Proxy b10 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b10, Proxy b11 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b11 -> Set DefaultComponentType)
-> Proxy b11 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b11, Proxy b12 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b12 -> Set DefaultComponentType)
-> Proxy b12 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b12, Proxy b13 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b13 -> Set DefaultComponentType)
-> Proxy b13 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b13, Proxy b14 -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (Proxy b14 -> Set DefaultComponentType)
-> Proxy b14 -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b14]

require :: forall b. (RequiredBundle b) => Set DefaultComponentType
require :: forall {k} (b :: k). RequiredBundle b => Set DefaultComponentType
require = Proxy b -> Set DefaultComponentType
forall {k} (b :: k).
RequiredBundle b =>
Proxy b -> Set DefaultComponentType
defaultBundleData (forall (t :: k). Proxy t
forall {k} (t :: k). Proxy t
Proxy @b)

requireAll :: forall c. (Component c) => Set DefaultComponentType
requireAll :: forall c. Component c => Set DefaultComponentType
requireAll = Set DefaultComponentType -> Set DefaultComponentType
requireAll' (Set DefaultComponentType -> Set DefaultComponentType)
-> Set DefaultComponentType -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ forall c. Component c => Set DefaultComponentType
required @c

requireAll' :: Set DefaultComponentType -> Set DefaultComponentType
requireAll' :: Set DefaultComponentType -> Set DefaultComponentType
requireAll' !Set DefaultComponentType
set =
  let !nextSet :: Set DefaultComponentType
nextSet = Set DefaultComponentType -> Set DefaultComponentType
expandAll Set DefaultComponentType
set
   in if Set DefaultComponentType -> Bool
forall a. Set a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Set DefaultComponentType
nextSet then Set DefaultComponentType
set else Set DefaultComponentType -> Set DefaultComponentType
requireAll' (Set DefaultComponentType -> Set DefaultComponentType)
-> Set DefaultComponentType -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ Set DefaultComponentType
-> Set DefaultComponentType -> Set DefaultComponentType
forall a. Ord a => Set a -> Set a -> Set a
Set.union Set DefaultComponentType
set Set DefaultComponentType
nextSet

expandAll :: Set DefaultComponentType -> Set DefaultComponentType
expandAll :: Set DefaultComponentType -> Set DefaultComponentType
expandAll !Set DefaultComponentType
set =
  let !newSet :: Set DefaultComponentType
newSet = [Set DefaultComponentType] -> Set DefaultComponentType
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions ([Set DefaultComponentType] -> Set DefaultComponentType)
-> [Set DefaultComponentType] -> Set DefaultComponentType
forall a b. (a -> b) -> a -> b
$ (DefaultComponentType -> Set DefaultComponentType)
-> [DefaultComponentType] -> [Set DefaultComponentType]
forall a b. (a -> b) -> [a] -> [b]
map DefaultComponentType -> Set DefaultComponentType
expandOne (Set DefaultComponentType -> [DefaultComponentType]
forall a. Set a -> [a]
Set.toList Set DefaultComponentType
set)
   in Set DefaultComponentType
-> Set DefaultComponentType -> Set DefaultComponentType
forall a. Ord a => Set a -> Set a -> Set a
Set.difference Set DefaultComponentType
newSet Set DefaultComponentType
set

expandOne :: DefaultComponentType -> Set DefaultComponentType
expandOne :: DefaultComponentType -> Set DefaultComponentType
expandOne (DefaultComponentType (Proxy c
_ :: (Proxy c))) = forall c. Component c => Set DefaultComponentType
required @c

toBundleElement :: DefaultComponentType -> BundleElement ErasedComponent
toBundleElement :: DefaultComponentType -> BundleElement ErasedComponent
toBundleElement (DefaultComponentType (Proxy c
_ :: (Proxy c))) = ComponentRep -> ErasedComponent -> BundleElement ErasedComponent
forall e. ComponentRep -> e -> BundleElement e
BundleElement (ComponentType -> ComponentRep
ComponentRep (ComponentType -> ComponentRep) -> ComponentType -> ComponentRep
forall a b. (a -> b) -> a -> b
$ Proxy c -> ComponentType
forall c. Component c => Proxy c -> ComponentType
ComponentType (Proxy c -> ComponentType) -> Proxy c -> ComponentType
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @c) (ErasedComponent -> BundleElement ErasedComponent)
-> ErasedComponent -> BundleElement ErasedComponent
forall a b. (a -> b) -> a -> b
$ c -> ErasedComponent
forall c. Component c => c -> ErasedComponent
ErasedComponent (c -> ErasedComponent) -> c -> ErasedComponent
forall a b. (a -> b) -> a -> b
$ forall a. Default a => a
def @c