packages feed

domain-0.1.1.5: library/Domain/Attoparsec/TypeString.hs

module Domain.Attoparsec.TypeString where

import Control.Applicative.Combinators.NonEmpty
import Data.Attoparsec.Text hiding (sepBy1)
import Domain.Attoparsec.General
import Domain.Models.TypeString
import Domain.Prelude hiding (takeWhile)

commaSeq :: Parser [NonEmpty Unit]
commaSeq =
  commaSeparated appSeq

appSeq :: Parser (NonEmpty Unit)
appSeq =
  sepBy1 unit skipSpace1

unit :: Parser Unit
unit =
  asum
    [ InSquareBracketsUnit <$> inSquareBrackets appSeq,
      InParensUnit <$> inParens commaSeq,
      RefUnit <$> typeRef
    ]

typeRef :: Parser (NonEmpty Text)
typeRef =
  sepBy1 ucName (char '.')