module Compiler.Lexer.Delimeters where import Common import Control.Applicative import Parser import Test.Common data Delimeter = DlColon | DlComma | DlPeriod | DlParenOpen | DlParenClose | DlSquareParenOpen | DlSquareParenClose | DlBraceParenOpen | DlBraceParenClose deriving (Show, Lift, Eq, Enum) instance HasParser Delimeter where parser = parseFor DlColon <|> parseFor DlPeriod <|> parseFor DlParenOpen <|> parseFor DlParenClose <|> parseFor DlSquareParenOpen <|> parseFor DlSquareParenClose <|> parseFor DlBraceParenOpen <|> parseFor DlBraceParenClose <|> parseFor DlComma where parseFor :: Delimeter -> Parser Delimeter parseFor kw = parseAndReturn (toSource kw) kw instance ToSource Delimeter where toSource = \case DlColon -> ":" DlPeriod -> "." DlParenOpen -> "(" DlParenClose -> ")" DlSquareParenOpen -> "[" DlSquareParenClose -> "]" DlBraceParenOpen -> "{" DlBraceParenClose -> "}" DlComma -> "," instance HasGen Delimeter where getGen = enum DlColon DlBraceParenClose