{-# LANGUAGE DeriveAnyClass #-}

-- {-# OPTIONS_GHC -fforce-recomp #-}

module Global.Resource.CubeMap.Base
  ( Collection(..)
  , sources
  ) where

import RIO

import Data.Distributive (Distributive(..))
import Data.Distributive.Generic (genericCollect)
import Data.Functor.Rep (Co(..), Representable)
import GHC.Generics (Generic1)
import Resource.Source (Source)
import Resource.Source qualified as Source

import Global.Resource.CubeMap.Base.Paths qualified as Paths

data Collection a = Collection
  { Collection a -> a
black        :: a
  }
  deriving stock (Int -> Collection a -> ShowS
[Collection a] -> ShowS
Collection a -> String
(Int -> Collection a -> ShowS)
-> (Collection a -> String)
-> ([Collection a] -> ShowS)
-> Show (Collection a)
forall a. Show a => Int -> Collection a -> ShowS
forall a. Show a => [Collection a] -> ShowS
forall a. Show a => Collection a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Collection a] -> ShowS
$cshowList :: forall a. Show a => [Collection a] -> ShowS
show :: Collection a -> String
$cshow :: forall a. Show a => Collection a -> String
showsPrec :: Int -> Collection a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Collection a -> ShowS
Show, a -> Collection b -> Collection a
(a -> b) -> Collection a -> Collection b
(forall a b. (a -> b) -> Collection a -> Collection b)
-> (forall a b. a -> Collection b -> Collection a)
-> Functor Collection
forall a b. a -> Collection b -> Collection a
forall a b. (a -> b) -> Collection a -> Collection b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Collection b -> Collection a
$c<$ :: forall a b. a -> Collection b -> Collection a
fmap :: (a -> b) -> Collection a -> Collection b
$cfmap :: forall a b. (a -> b) -> Collection a -> Collection b
Functor, Collection a -> Bool
(a -> m) -> Collection a -> m
(a -> b -> b) -> b -> Collection a -> b
(forall m. Monoid m => Collection m -> m)
-> (forall m a. Monoid m => (a -> m) -> Collection a -> m)
-> (forall m a. Monoid m => (a -> m) -> Collection a -> m)
-> (forall a b. (a -> b -> b) -> b -> Collection a -> b)
-> (forall a b. (a -> b -> b) -> b -> Collection a -> b)
-> (forall b a. (b -> a -> b) -> b -> Collection a -> b)
-> (forall b a. (b -> a -> b) -> b -> Collection a -> b)
-> (forall a. (a -> a -> a) -> Collection a -> a)
-> (forall a. (a -> a -> a) -> Collection a -> a)
-> (forall a. Collection a -> [a])
-> (forall a. Collection a -> Bool)
-> (forall a. Collection a -> Int)
-> (forall a. Eq a => a -> Collection a -> Bool)
-> (forall a. Ord a => Collection a -> a)
-> (forall a. Ord a => Collection a -> a)
-> (forall a. Num a => Collection a -> a)
-> (forall a. Num a => Collection a -> a)
-> Foldable Collection
forall a. Eq a => a -> Collection a -> Bool
forall a. Num a => Collection a -> a
forall a. Ord a => Collection a -> a
forall m. Monoid m => Collection m -> m
forall a. Collection a -> Bool
forall a. Collection a -> Int
forall a. Collection a -> [a]
forall a. (a -> a -> a) -> Collection a -> a
forall m a. Monoid m => (a -> m) -> Collection a -> m
forall b a. (b -> a -> b) -> b -> Collection a -> b
forall a b. (a -> b -> b) -> b -> Collection 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
product :: Collection a -> a
$cproduct :: forall a. Num a => Collection a -> a
sum :: Collection a -> a
$csum :: forall a. Num a => Collection a -> a
minimum :: Collection a -> a
$cminimum :: forall a. Ord a => Collection a -> a
maximum :: Collection a -> a
$cmaximum :: forall a. Ord a => Collection a -> a
elem :: a -> Collection a -> Bool
$celem :: forall a. Eq a => a -> Collection a -> Bool
length :: Collection a -> Int
$clength :: forall a. Collection a -> Int
null :: Collection a -> Bool
$cnull :: forall a. Collection a -> Bool
toList :: Collection a -> [a]
$ctoList :: forall a. Collection a -> [a]
foldl1 :: (a -> a -> a) -> Collection a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Collection a -> a
foldr1 :: (a -> a -> a) -> Collection a -> a
$cfoldr1 :: forall a. (a -> a -> a) -> Collection a -> a
foldl' :: (b -> a -> b) -> b -> Collection a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Collection a -> b
foldl :: (b -> a -> b) -> b -> Collection a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Collection a -> b
foldr' :: (a -> b -> b) -> b -> Collection a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Collection a -> b
foldr :: (a -> b -> b) -> b -> Collection a -> b
$cfoldr :: forall a b. (a -> b -> b) -> b -> Collection a -> b
foldMap' :: (a -> m) -> Collection a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Collection a -> m
foldMap :: (a -> m) -> Collection a -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Collection a -> m
fold :: Collection m -> m
$cfold :: forall m. Monoid m => Collection m -> m
Foldable, Functor Collection
Foldable Collection
Functor Collection
-> Foldable Collection
-> (forall (f :: * -> *) a b.
    Applicative f =>
    (a -> f b) -> Collection a -> f (Collection b))
-> (forall (f :: * -> *) a.
    Applicative f =>
    Collection (f a) -> f (Collection a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> Collection a -> m (Collection b))
-> (forall (m :: * -> *) a.
    Monad m =>
    Collection (m a) -> m (Collection a))
-> Traversable Collection
(a -> f b) -> Collection a -> f (Collection b)
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
    Applicative f =>
    (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a.
Monad m =>
Collection (m a) -> m (Collection a)
forall (f :: * -> *) a.
Applicative f =>
Collection (f a) -> f (Collection a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Collection a -> m (Collection b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Collection a -> f (Collection b)
sequence :: Collection (m a) -> m (Collection a)
$csequence :: forall (m :: * -> *) a.
Monad m =>
Collection (m a) -> m (Collection a)
mapM :: (a -> m b) -> Collection a -> m (Collection b)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Collection a -> m (Collection b)
sequenceA :: Collection (f a) -> f (Collection a)
$csequenceA :: forall (f :: * -> *) a.
Applicative f =>
Collection (f a) -> f (Collection a)
traverse :: (a -> f b) -> Collection a -> f (Collection b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Collection a -> f (Collection b)
$cp2Traversable :: Foldable Collection
$cp1Traversable :: Functor Collection
Traversable, (forall x. Collection a -> Rep (Collection a) x)
-> (forall x. Rep (Collection a) x -> Collection a)
-> Generic (Collection a)
forall x. Rep (Collection a) x -> Collection a
forall x. Collection a -> Rep (Collection a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Collection a) x -> Collection a
forall a x. Collection a -> Rep (Collection a) x
$cto :: forall a x. Rep (Collection a) x -> Collection a
$cfrom :: forall a x. Collection a -> Rep (Collection a) x
Generic, (forall a. Collection a -> Rep1 Collection a)
-> (forall a. Rep1 Collection a -> Collection a)
-> Generic1 Collection
forall a. Rep1 Collection a -> Collection a
forall a. Collection a -> Rep1 Collection a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cto1 :: forall a. Rep1 Collection a -> Collection a
$cfrom1 :: forall a. Collection a -> Rep1 Collection a
Generic1)
  deriving Functor Collection
a -> Collection a
Functor Collection
-> (forall a. a -> Collection a)
-> (forall a b.
    Collection (a -> b) -> Collection a -> Collection b)
-> (forall a b c.
    (a -> b -> c) -> Collection a -> Collection b -> Collection c)
-> (forall a b. Collection a -> Collection b -> Collection b)
-> (forall a b. Collection a -> Collection b -> Collection a)
-> Applicative Collection
Collection a -> Collection b -> Collection b
Collection a -> Collection b -> Collection a
Collection (a -> b) -> Collection a -> Collection b
(a -> b -> c) -> Collection a -> Collection b -> Collection c
forall a. a -> Collection a
forall a b. Collection a -> Collection b -> Collection a
forall a b. Collection a -> Collection b -> Collection b
forall a b. Collection (a -> b) -> Collection a -> Collection b
forall a b c.
(a -> b -> c) -> Collection a -> Collection b -> Collection c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
<* :: Collection a -> Collection b -> Collection a
$c<* :: forall a b. Collection a -> Collection b -> Collection a
*> :: Collection a -> Collection b -> Collection b
$c*> :: forall a b. Collection a -> Collection b -> Collection b
liftA2 :: (a -> b -> c) -> Collection a -> Collection b -> Collection c
$cliftA2 :: forall a b c.
(a -> b -> c) -> Collection a -> Collection b -> Collection c
<*> :: Collection (a -> b) -> Collection a -> Collection b
$c<*> :: forall a b. Collection (a -> b) -> Collection a -> Collection b
pure :: a -> Collection a
$cpure :: forall a. a -> Collection a
$cp1Applicative :: Functor Collection
Applicative via (Co Collection)
  deriving anyclass (Distributive Collection
Distributive Collection
-> (forall a. (Rep Collection -> a) -> Collection a)
-> (forall a. Collection a -> Rep Collection -> a)
-> Representable Collection
forall a. Collection a -> Rep Collection -> a
forall a. (Rep Collection -> a) -> Collection a
forall (f :: * -> *).
Distributive f
-> (forall a. (Rep f -> a) -> f a)
-> (forall a. f a -> Rep f -> a)
-> Representable f
index :: Collection a -> Rep Collection -> a
$cindex :: forall a. Collection a -> Rep Collection -> a
tabulate :: (Rep Collection -> a) -> Collection a
$ctabulate :: forall a. (Rep Collection -> a) -> Collection a
$cp1Representable :: Distributive Collection
Representable)

instance Distributive Collection where
  collect :: (a -> Collection b) -> f a -> Collection (f b)
collect = (a -> Collection b) -> f a -> Collection (f b)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Generic1 g, GDistributive (Rep1 g)) =>
(a -> g b) -> f a -> g (f b)
genericCollect

sources :: Collection Source
sources :: Collection Source
sources = Collection :: forall a. a -> Collection a
Collection
  { $sel:black:Collection :: Source
black        = $(Source.embedFile Paths.BLACK_KTX_ZST)
  }