module Language.Haskell.TH.Natural.Syntax.Name (TypeVarName, newTypeVar) where

import qualified Language.Haskell.TH as TH
import Language.Haskell.TH.Natural.Syntax.Builder
import Language.Haskell.TH.Syntax.ExtractedCons (VarT (MkVarT))

type TypeVarName = VarT

-- | Builds a new type variable
newTypeVar :: String -> Builder st step step TypeVarName
newTypeVar :: forall {k} st (step :: k).
String -> Builder st step step TypeVarName
newTypeVar String
n = Q TypeVarName -> BaseBuilder Q st step step TypeVarName
forall {k} (m :: * -> *) a s (step :: k).
Monad m =>
m a -> BaseBuilder m s step step a
liftB (Name -> TypeVarName
MkVarT (Name -> TypeVarName) -> Q Name -> Q TypeVarName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Q Name
forall (m :: * -> *). Quote m => String -> m Name
TH.newName String
n)