{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} module Language.Dhall.Lexer.Types ( Operator (..) , Keyword (..) , TokenType (..) ) where import Control.DeepSeq (NFData) import qualified Data.ByteString.Lazy as BSL import GHC.Generics (Generic) import GHC.Natural (Natural) -- | The operator type holds some special builtin symbols. data Operator = CombineTok | PreferTok | ArrowTok -- @→@ or @->@ | LambdaTok -- @λ@ or @\\@ | AndTok -- @&&@ | OrTok -- @||@ | EqTok -- @==@ | NeqTok -- @!=@ | AppendTok -- @++@ deriving (Eq, Show, Generic, NFData) -- | Data type for reserved keywords. data Keyword = KwLet | KwIn | KwConstructors | KwMerge | KwForall -- @forall@ or @∀@ | KwIf | KwThen | KwElse deriving (Eq, Show, Generic, NFData) -- | This is a data type for tokens, stripped of any annotation. data TokenType = IntLit !Integer | DoubleLit !Double | NatLit !Natural | BoolLit !Bool | Embedded !BSL.ByteString | StringLit !BSL.ByteString | TypeId !BSL.ByteString | QuotedId !BSL.ByteString | Identifier !BSL.ByteString | Keyword !Keyword | Special !BSL.ByteString | Operator !Operator | BeginSplice -- @${@, only occurs inside a string | EndSplice -- @}@ | StringChunk !BSL.ByteString | End deriving (Eq, Show, Generic, NFData)