{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-} -- | Term Literal module CLaSH.Core.Literal ( Literal (..) , literalType ) where import Unbound.LocallyNameless as Unbound import Unbound.LocallyNameless.Alpha import {-# SOURCE #-} CLaSH.Core.Term (Term) import {-# SOURCE #-} CLaSH.Core.Type (Type) import CLaSH.Core.TysPrim (intPrimTy, voidPrimTy) -- | Term Literal data Literal = IntegerLiteral Integer | StringLiteral String deriving (Eq,Ord,Show) Unbound.derive [''Literal] instance Alpha Literal where fv' _ _ = emptyC acompare' _ (IntegerLiteral i) (IntegerLiteral j) = compare i j acompare' c l1 l2 = acompareR1 rep1 c l1 l2 instance Subst Type Literal instance Subst Term Literal -- | Determines the Type of a Literal literalType :: Literal -> Type literalType (IntegerLiteral _) = intPrimTy literalType (StringLiteral _) = voidPrimTy