spade-0.1.0.0: src/Compiler/Lexer/Delimeters.hs
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