module Saison.Decoding.Tokens (
Tokens (..),
Lit (..),
TkArray (..),
TkRecord (..),
AsError (..),
) where
import Data.Scientific (Scientific)
import Data.Text (Text)
data Tokens k e
= TkLit !Lit k
| TkText !Text k
| TkNumber !Scientific k
| TkArrayOpen (TkArray k e)
| TkRecordOpen (TkRecord k e)
| TkErr e
deriving (Eq, Show)
data Lit = LitNull | LitTrue | LitFalse
deriving (Eq, Show)
data TkArray k e
= TkItem (Tokens (TkArray k e) e)
| TkArrayEnd k
| TkArrayErr e
deriving (Eq, Show)
data TkRecord k e
= TkPair !Text (Tokens (TkRecord k e) e)
| TkRecordEnd k
| TkRecordErr e
deriving (Eq, Show)
class AsError t where tkErr :: e -> t k e
instance AsError Tokens where tkErr = TkErr
instance AsError TkArray where tkErr = TkArrayErr
instance AsError TkRecord where tkErr = TkRecordErr