packages feed

cabal-gild-1.0.2.0: source/library/CabalGild/Type/Pragma.hs

module CabalGild.Type.Pragma where

import qualified Control.Monad as Monad
import qualified Data.List.NonEmpty as NonEmpty
import qualified Distribution.Compat.CharParsing as CharParsing
import qualified Distribution.FieldGrammar.Newtypes as Newtypes
import qualified Distribution.Parsec as Parsec

-- | A pragma, which is a special comment used to customize behavior.
newtype Pragma
  = -- | Discover modules within the given directory.
    Discover (NonEmpty.NonEmpty FilePath)
  deriving (Eq, Show)

instance Parsec.Parsec Pragma where
  parsec = do
    CharParsing.spaces
    Monad.void $ CharParsing.string "cabal-gild:"
    CharParsing.spaces
    Monad.void $ CharParsing.string "discover"
    CharParsing.skipSpaces1
    Discover
      . fmap Newtypes.getFilePathNT
      <$> CharParsing.sepByNonEmpty Parsec.parsec CharParsing.skipSpaces1