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