{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeAbstractions #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoCUSKs #-}
{-# LANGUAGE NoNamedWildCards #-}
{-# LANGUAGE NoStarIsType #-}

module Mischief.Shader.Internal.Singletons where

import Data.Singletons.Base.CustomStar
import GHC.TypeLits
import Prelude (Eq)

data PrimitiveTypes = TInt | TFloat | TUInt deriving (PrimitiveTypes -> PrimitiveTypes -> Bool
(PrimitiveTypes -> PrimitiveTypes -> Bool)
-> (PrimitiveTypes -> PrimitiveTypes -> Bool) -> Eq PrimitiveTypes
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PrimitiveTypes -> PrimitiveTypes -> Bool
== :: PrimitiveTypes -> PrimitiveTypes -> Bool
$c/= :: PrimitiveTypes -> PrimitiveTypes -> Bool
/= :: PrimitiveTypes -> PrimitiveTypes -> Bool
Eq)

data Types where
  Primitive :: PrimitiveTypes -> Types
  ArrayType :: Types -> Types
  VectorType :: Nat -> PrimitiveTypes -> Types
  MatrixType :: Nat -> Nat -> Types
  TTexture :: Types
  TSampler :: Types
  TVoid :: Types
  TBool :: Types
  MType :: Types -> Types
  deriving (Types -> Types -> Bool
(Types -> Types -> Bool) -> (Types -> Types -> Bool) -> Eq Types
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Types -> Types -> Bool
== :: Types -> Types -> Bool
$c/= :: Types -> Types -> Bool
/= :: Types -> Types -> Bool
Eq)

genSingletons [''PrimitiveTypes, ''Types]