{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedLists #-} module Cmt.Parser.Config ( config , predefined ) where import ClassyPrelude import Data.Attoparsec.Text import Cmt.Parser.Config.Format (formatP) import Cmt.Parser.Config.Parts (partsP) import Cmt.Parser.Config.PreDefined (predefinedPartsP) import Cmt.Types.Config configP :: Parser Config configP = do parts <- partsP _ <- predefinedPartsP parts format <- formatP $ partName <$> parts _ <- endOfInput pure $ Config parts format predefinedP :: Parser PreDefinedParts predefinedP = do parts <- partsP pre <- predefinedPartsP parts _ <- formatP $ partName <$> parts _ <- endOfInput pure pre -- run parser config :: Text -> Either Text Config config cfg = case parseOnly configP cfg of Right c -> Right c Left _ -> Left "Could not parse config. Check that your format doesn't contain any invalid parts." predefined :: Text -> Either Text PreDefinedParts predefined cfg = case parseOnly predefinedP cfg of Right c -> Right c Left _ -> Left "Could not parse config"