module Hydrogen.Syntax.Types where

import Hydrogen.Prelude
import Hydrogen.Parsing

type POPs = [(SourcePos, POP)]

data POP where
    Token :: TokenType -> [Char] -> [Char] -> POP
    Block :: BlockType -> [Char] -> POPs -> POP
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Serialize POP

data TokenType where
    AposString :: TokenType
    QuotString :: TokenType
    TickString :: TokenType
    SomethingT :: TokenType
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Serialize TokenType

data BlockType where
    Grouping :: BlockType
    Brackets :: BlockType
    Mustache :: BlockType
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Serialize BlockType

data Token where
    TComma :: Token
    TSemicolon :: Token
    TBraceOpen :: [Char] -> Char -> Token
    TBraceClose :: Char -> Token
    TSomething :: [Char] -> Token
    TIndent :: Int -> Token
    TSpaces :: Token
    TString :: [Char] -> Char -> [Char] -> Token
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Serialize Token