dhall-lex-0.2.0.0: src/Language/Dhall/Lexer/Types.hs
{-# 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)