module CLaSH.Core.Literal
( Literal (..)
, literalType
)
where
import Control.DeepSeq (NFData (..))
import GHC.Generics (Generic)
import Unbound.Generics.LocallyNameless.Extra ()
import Unbound.Generics.LocallyNameless (Alpha (..), Subst (..))
import CLaSH.Core.Type (Type)
import CLaSH.Core.TysPrim (intPrimTy, voidPrimTy)
data Literal
= IntegerLiteral Integer
| StringLiteral String
| RationalLiteral Rational
deriving (Eq,Ord,Show,Generic,NFData)
instance Alpha Literal where
fvAny' _ _ l = pure l
instance Subst a Literal where
subst _ _ l = l
substs _ l = l
literalType :: Literal
-> Type
literalType (IntegerLiteral _) = intPrimTy
literalType (RationalLiteral _) = voidPrimTy
literalType (StringLiteral _) = voidPrimTy