gpu-vulkan-0.1.0.137: src/Gpu/Vulkan/TypeEnum.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE ScopedTypeVariables, RankNTypes, TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures, TypeOperators #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Gpu.Vulkan.TypeEnum where
import Language.Haskell.TH
import Data.Bits
import Gpu.Vulkan.TypeEnum.Th
import qualified Gpu.Vulkan.Enum as E
import Gpu.Vulkan.TypeEnum.TypeValues
do is <- lines <$> runIO (readFile "th/vkShaderStageFlagBits.txt")
(: []) <$> dataD (pure []) (mkName "ShaderStageFlagBits") [] Nothing
((`normalC` []) . mkName <$> is)
[]
class ShaderStageFlagBitsListToValue (ts :: [ShaderStageFlagBits]) where
shaderStageFlagBitsListToValue :: E.ShaderStageFlagBits
instance ShaderStageFlagBitsListToValue '[] where
shaderStageFlagBitsListToValue = zeroBits
instance (ShaderStageFlagBitsToValue t, ShaderStageFlagBitsListToValue ts) =>
ShaderStageFlagBitsListToValue (t ': ts) where
shaderStageFlagBitsListToValue =
shaderStageFlagBitsToValue @t .|.
shaderStageFlagBitsListToValue @ts
class ShaderStageFlagBitsToValue (t :: ShaderStageFlagBits) where
shaderStageFlagBitsToValue :: E.ShaderStageFlagBits
do is <- lines <$> runIO (readFile "th/vkShaderStageFlagBits.txt")
sequence $ mkInstance <$> is
typeValues "E" "Format" =<< lines <$> runIO (readFile "th/vkFormat.txt")