{-# language CPP #-}
module Graphics.Vulkan.Zero (Zero(..)) where
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import qualified Data.Vector.Storable.Sized (replicate)
import Foreign.C.Types (CChar)
import Foreign.C.Types (CFloat)
import Foreign.C.Types (CInt)
import Foreign.C.Types (CSize)
import Foreign.Storable (Storable)
import Data.Int (Int16)
import Data.Int (Int32)
import Data.Int (Int64)
import Data.Int (Int8)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.TypeNats (KnownNat)
import Data.Word (Word16)
import Data.Word (Word32)
import Data.Word (Word64)
import Data.Word (Word8)
import qualified Data.Vector.Storable.Sized (Vector)
class Zero a where
zero :: a
instance (KnownNat n, Storable a, Zero a) => Zero (Data.Vector.Storable.Sized.Vector n a) where
zero = Data.Vector.Storable.Sized.replicate zero
instance Zero Bool where
zero = False
instance Zero (FunPtr a) where
zero = nullFunPtr
instance Zero (Ptr a) where
zero = nullPtr
instance Zero Int8 where
zero = 0
instance Zero Int16 where
zero = 0
instance Zero Int32 where
zero = 0
instance Zero Int64 where
zero = 0
instance Zero Word8 where
zero = 0
instance Zero Word16 where
zero = 0
instance Zero Word32 where
zero = 0
instance Zero Word64 where
zero = 0
instance Zero Float where
zero = 0
instance Zero CFloat where
zero = 0
instance Zero CChar where
zero = 0
instance Zero CSize where
zero = 0
instance Zero CInt where
zero = 0