{-# LANGUAGE DeriveDataTypeable #-}
module Language.C.Data.Name (
Name(..),newNameSupply, namesStartingFrom
) where
import Data.Ix
import Data.Generics hiding (Generic)
import GHC.Generics (Generic)
import Control.DeepSeq (NFData)
newtype Name = Name { nameId :: Int }
deriving (Show, Read, Eq, Ord, Ix, Data, Typeable, Generic)
instance NFData Name
instance Enum Name where
toEnum = Name
fromEnum (Name n) = n
newNameSupply :: [Name]
newNameSupply = namesStartingFrom 0
namesStartingFrom :: Int -> [Name]
namesStartingFrom k = [Name k..]