{-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE ScopedTypeVariables #-} module Servant.EDE.Internal.Reify (Reify(..)) where import Data.Proxy import GHC.TypeLits -- | Helper class to reify a type-level list of strings -- into a value-level list of string. Used to turn -- the type-level list of template file names into -- a value-level list. class Reify (symbols :: [Symbol]) where reify :: Proxy symbols -> [String] instance Reify '[] where reify _ = [] instance (KnownSymbol s, Reify symbols) => Reify (s ': symbols) where reify _ = symbolVal ps : reify psymbols where ps = Proxy :: Proxy s psymbols = Proxy :: Proxy symbols