{-# 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 Data.Scientific 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 | KwText | KwDouble | KwInteger | KwList | KwNatural | KwBool | KwOptional | KwNatFold | KwNatBuild | KwNatIsZero | KwNatEven | KwNatOdd | KwNatToInteger | KwNatShow | KwIntegerShow | KwDoubleShow | KwListBuild | KwListFold | KwListLength | KwListHead | KwListLast | KwListIndexed | KwListReverse | KwOptionalFold | KwOptionalBuild | KwType | KwKind deriving (Eq, Show, Generic, NFData) -- | This is a data type for tokens, stripped of any annotation. data TokenType = IntLit !Integer | DoubleTok !Scientific | NatLit !Natural | BoolTok !Bool | EmbedFile !BSL.ByteString | EmbedURL !BSL.ByteString | TypeId !BSL.ByteString | QuotedId !BSL.ByteString | Identifier !BSL.ByteString | Keyword !Keyword | Special !BSL.ByteString | Operator !Operator | AtToken !Integer -- for e.g. @x\@0@. | BeginSplice -- @${@, only occurs inside a string | EndSplice -- @}@ | StringChunk !BSL.ByteString | End deriving (Eq, Show, Generic, NFData)