{-# OPTIONS_GHC -XTemplateHaskell  #-}
module Syntax.Name (

    arrowName, errorName, isTuple, isAnyTuple, isCons, isNil, listTypeName,

    module Language.Haskell.TH,
    
) where

import Language.Haskell.TH (Name, mkName, tupleDataName, tupleTypeName)

arrowName :: Name
arrowName = ''(->)

errorName :: Name
errorName = 'error

isTuple :: Name -> Int -> Bool
isTuple n i = n == tupleDataName i

isAnyTuple :: Name -> Bool
isAnyTuple n = any (isTuple n) (0:[2..15])

listTypeName :: Name
listTypeName = ''[]

isNil :: Name -> Bool
isNil = (==) '[]

isCons :: Name -> Bool
isCons = (==) '(:)
   
