algebraic-path-0.1: src/ast/AlgebraicPath/Ast/Component.hs
module AlgebraicPath.Ast.Component
( Component (..),
attoparsecParserOf,
toTextBuilder,
)
where
import AlgebraicPath.Ast.Name qualified as Name
import Data.Attoparsec.Text qualified as Attoparsec
import TextBuilder qualified
import Prelude
data Component
= NameComponent Name.Name
| DotComponent
| DotDotComponent
attoparsecParserOf :: Attoparsec.Parser Component
attoparsecParserOf = do
name <- Name.attoparsecParserOf
if Name.null name
then do
mplus
( do
_ <- Attoparsec.char '.'
mplus
(Attoparsec.char '.' $> DotDotComponent)
(pure DotComponent)
)
(pure (NameComponent name))
else pure (NameComponent name)
toTextBuilder :: Component -> TextBuilder.TextBuilder
toTextBuilder = \case
NameComponent name -> Name.toTextBuilder name
DotComponent -> "."
DotDotComponent -> ".."