{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE UndecidableInstances #-}
module Crem.Render.RenderableVertices where
import "base" Data.Functor.Const (Const (..))
import "base" Data.Functor.Identity (Identity (..))
import "base" Data.Monoid (Dual (..), Product (..), Sum (..))
import "base" Data.Ord (Down (..))
import "base" Data.Proxy (Proxy (..))
import "base" Data.Semigroup (All (..), Any (..), First (..), Last (..), Max (..), Min (..))
import "base" Data.Void (Void)
class RenderableVertices a where
vertices :: [a]
newtype AllVertices a = AllVertices a
instance (Enum a, Bounded a) => RenderableVertices (AllVertices a) where
vertices :: [AllVertices a]
vertices :: [AllVertices a]
vertices = a -> AllVertices a
forall a. a -> AllVertices a
AllVertices (a -> AllVertices a) -> [a] -> [AllVertices a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [a
forall a. Bounded a => a
minBound .. a
forall a. Bounded a => a
maxBound]
instance RenderableVertices Void where
vertices :: [Void]
vertices :: [Void]
vertices = []
deriving via AllVertices () instance RenderableVertices ()
deriving via AllVertices Bool instance RenderableVertices Bool
deriving newtype instance RenderableVertices All
deriving newtype instance RenderableVertices Any
deriving via AllVertices Ordering instance RenderableVertices Ordering
instance RenderableVertices a => RenderableVertices (Maybe a) where
vertices :: [Maybe a]
vertices :: [Maybe a]
vertices =
Maybe a
forall a. Maybe a
Nothing Maybe a -> [Maybe a] -> [Maybe a]
forall a. a -> [a] -> [a]
: (a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> [a] -> [Maybe a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [a]
forall a. RenderableVertices a => [a]
vertices)
deriving newtype instance RenderableVertices a => RenderableVertices (Min a)
deriving newtype instance RenderableVertices a => RenderableVertices (Max a)
deriving newtype instance RenderableVertices a => RenderableVertices (First a)
deriving newtype instance RenderableVertices a => RenderableVertices (Last a)
deriving newtype instance RenderableVertices a => RenderableVertices (Identity a)
deriving newtype instance RenderableVertices a => RenderableVertices (Dual a)
deriving newtype instance RenderableVertices a => RenderableVertices (Sum a)
deriving newtype instance RenderableVertices a => RenderableVertices (Down a)
deriving newtype instance RenderableVertices a => RenderableVertices (Product a)
instance RenderableVertices (Proxy a) where
vertices :: [Proxy a]
vertices :: [Proxy a]
vertices = [Proxy a
forall {k} (t :: k). Proxy t
Proxy]
deriving newtype instance RenderableVertices a => RenderableVertices (Const a b)
instance (RenderableVertices a, RenderableVertices b) => RenderableVertices (Either a b) where
vertices :: [Either a b]
vertices :: [Either a b]
vertices =
(a -> Either a b
forall a b. a -> Either a b
Left (a -> Either a b) -> [a] -> [Either a b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [a]
forall a. RenderableVertices a => [a]
vertices)
[Either a b] -> [Either a b] -> [Either a b]
forall a. Semigroup a => a -> a -> a
<> (b -> Either a b
forall a b. b -> Either a b
Right (b -> Either a b) -> [b] -> [Either a b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [b]
forall a. RenderableVertices a => [a]
vertices)
instance (RenderableVertices a, RenderableVertices b) => RenderableVertices (a, b) where
vertices :: [(a, b)]
vertices :: [(a, b)]
vertices = [(a
a, b
b) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices]
instance (RenderableVertices a, RenderableVertices b, RenderableVertices c) => RenderableVertices (a, b, c) where
vertices :: [(a, b, c)]
vertices :: [(a, b, c)]
vertices = [(a
a, b
b, c
c) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices, c
c <- [c]
forall a. RenderableVertices a => [a]
vertices]
instance (RenderableVertices a, RenderableVertices b, RenderableVertices c, RenderableVertices d) => RenderableVertices (a, b, c, d) where
vertices :: [(a, b, c, d)]
vertices :: [(a, b, c, d)]
vertices = [(a
a, b
b, c
c, d
d) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices, c
c <- [c]
forall a. RenderableVertices a => [a]
vertices, d
d <- [d]
forall a. RenderableVertices a => [a]
vertices]
instance (RenderableVertices a, RenderableVertices b, RenderableVertices c, RenderableVertices d, RenderableVertices e) => RenderableVertices (a, b, c, d, e) where
vertices :: [(a, b, c, d, e)]
vertices :: [(a, b, c, d, e)]
vertices = [(a
a, b
b, c
c, d
d, e
e) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices, c
c <- [c]
forall a. RenderableVertices a => [a]
vertices, d
d <- [d]
forall a. RenderableVertices a => [a]
vertices, e
e <- [e]
forall a. RenderableVertices a => [a]
vertices]
instance (RenderableVertices a, RenderableVertices b, RenderableVertices c, RenderableVertices d, RenderableVertices e, RenderableVertices f) => RenderableVertices (a, b, c, d, e, f) where
vertices :: [(a, b, c, d, e, f)]
vertices :: [(a, b, c, d, e, f)]
vertices = [(a
a, b
b, c
c, d
d, e
e, f
f) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices, c
c <- [c]
forall a. RenderableVertices a => [a]
vertices, d
d <- [d]
forall a. RenderableVertices a => [a]
vertices, e
e <- [e]
forall a. RenderableVertices a => [a]
vertices, f
f <- [f]
forall a. RenderableVertices a => [a]
vertices]
instance (RenderableVertices a, RenderableVertices b, RenderableVertices c, RenderableVertices d, RenderableVertices e, RenderableVertices f, RenderableVertices g) => RenderableVertices (a, b, c, d, e, f, g) where
vertices :: [(a, b, c, d, e, f, g)]
vertices :: [(a, b, c, d, e, f, g)]
vertices = [(a
a, b
b, c
c, d
d, e
e, f
f, g
g) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices, c
c <- [c]
forall a. RenderableVertices a => [a]
vertices, d
d <- [d]
forall a. RenderableVertices a => [a]
vertices, e
e <- [e]
forall a. RenderableVertices a => [a]
vertices, f
f <- [f]
forall a. RenderableVertices a => [a]
vertices, g
g <- [g]
forall a. RenderableVertices a => [a]
vertices]
instance (RenderableVertices a, RenderableVertices b, RenderableVertices c, RenderableVertices d, RenderableVertices e, RenderableVertices f, RenderableVertices g, RenderableVertices h) => RenderableVertices (a, b, c, d, e, f, g, h) where
vertices :: [(a, b, c, d, e, f, g, h)]
vertices :: [(a, b, c, d, e, f, g, h)]
vertices = [(a
a, b
b, c
c, d
d, e
e, f
f, g
g, h
h) | a
a <- [a]
forall a. RenderableVertices a => [a]
vertices, b
b <- [b]
forall a. RenderableVertices a => [a]
vertices, c
c <- [c]
forall a. RenderableVertices a => [a]
vertices, d
d <- [d]
forall a. RenderableVertices a => [a]
vertices, e
e <- [e]
forall a. RenderableVertices a => [a]
vertices, f
f <- [f]
forall a. RenderableVertices a => [a]
vertices, g
g <- [g]
forall a. RenderableVertices a => [a]
vertices, h
h <- [h]
forall a. RenderableVertices a => [a]
vertices]