module Text.Haiji.Syntax.Variable
( Variable(..)
, variable
) where
import Data.Attoparsec.Text
import Text.Haiji.Syntax.Identifier
data Variable = VariableBase Identifier
| VariableAttribute Variable Identifier
deriving Eq
instance Show Variable where
show (VariableBase var) = show var
show (VariableAttribute var attr) = shows var "." ++ show attr
variable :: Parser Variable
variable = identifier >>= go . VariableBase where
go var = do
skipSpace
peek <- peekChar
case peek of
Nothing -> return var
Just '}' -> return var
Just ' ' -> return var
Just '.' -> char '.' >> skipSpace >> identifier >>= go . VariableAttribute var
_ -> return var