language-spir-v-0.1.0.0: src/Language/SpirV/ShaderKind.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE DataKinds, KindSignatures #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Language.SpirV.ShaderKind where
import Language.Haskell.TH
import Data.Traversable
import qualified Language.SpirV.ShaderKind.Core as C
(: []) <$> do
enms <- runIO $ lines <$> readFile "data/ShaderKind.txt"
dataD (cxt []) (mkName "ShaderKind") [] Nothing
((\enm -> normalC (mkName enm) []) <$> enms)
[derivClause Nothing [conT ''Show]]
class IsShaderKind (sknd :: ShaderKind) where shaderKind :: C.ShaderKind
do enms <- runIO $ lines <$> readFile "data/ShaderKind.txt"
pairs <- for enms \nm -> do
Just foo <- lookupValueName nm
Just bar <- lookupValueName $ "C." ++ nm
pure (foo, bar)
(\(knd, cknd) -> instanceD (cxt []) (conT ''IsShaderKind `appT` promotedT knd)
[valD (varP 'shaderKind) (normalB $ conE cknd) []]) `mapM` pairs