module Graphics.IxShader.Function.ToParams where
import Language.Haskell.TH
import Graphics.IxShader.Socket
class ToParams a where
toParams :: a -> [String]
instance ToParams () where
toParams () = []
genToParams :: TypeQ -> DecsQ
genToParams t = [d|
instance (Socketed $t, KnownTypeSymbol $t) => ToParams $t where
toParams a = [toDefinition a]
|]
instance (ToParams a, ToParams b) => ToParams (a, b) where
toParams (a, b) = toParams a ++ toParams b
instance (ToParams a, ToParams b, ToParams c) => ToParams (a, b, c) where
toParams (a, b, c) = toParams a ++ toParams b ++ toParams c
instance (ToParams a, ToParams b, ToParams c, ToParams d) => ToParams (a, b, c, d) where
toParams (a, b, c, d) = toParams a ++ toParams b ++ toParams c ++ toParams d
toNames :: ToParams ps => ps -> [String]
toNames = map (drop 1 . dropWhile (/= ' ')) . toParams