module CabalGild.Type.Pragma where

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

newtype Pragma
  = Discover FilePath
  deriving (Pragma -> Pragma -> Bool
(Pragma -> Pragma -> Bool)
-> (Pragma -> Pragma -> Bool) -> Eq Pragma
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Pragma -> Pragma -> Bool
== :: Pragma -> Pragma -> Bool
$c/= :: Pragma -> Pragma -> Bool
/= :: Pragma -> Pragma -> Bool
Eq, Int -> Pragma -> ShowS
[Pragma] -> ShowS
Pragma -> FilePath
(Int -> Pragma -> ShowS)
-> (Pragma -> FilePath) -> ([Pragma] -> ShowS) -> Show Pragma
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Pragma -> ShowS
showsPrec :: Int -> Pragma -> ShowS
$cshow :: Pragma -> FilePath
show :: Pragma -> FilePath
$cshowList :: [Pragma] -> ShowS
showList :: [Pragma] -> ShowS
Show)

instance Parsec.Parsec Pragma where
  parsec :: forall (m :: * -> *). CabalParsing m => m Pragma
parsec = do
    m ()
forall (m :: * -> *). CharParsing m => m ()
CharParsing.spaces
    m FilePath -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
Monad.void (m FilePath -> m ()) -> m FilePath -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> m FilePath
forall (m :: * -> *). CharParsing m => FilePath -> m FilePath
CharParsing.string FilePath
"cabal-gild:"
    m ()
forall (m :: * -> *). CharParsing m => m ()
CharParsing.spaces
    m FilePath -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
Monad.void (m FilePath -> m ()) -> m FilePath -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> m FilePath
forall (m :: * -> *). CharParsing m => FilePath -> m FilePath
CharParsing.string FilePath
"discover"
    m ()
forall (m :: * -> *). CharParsing m => m ()
CharParsing.skipSpaces1
    FilePath -> Pragma
Discover (FilePath -> Pragma)
-> (FilePathNT -> FilePath) -> FilePathNT -> Pragma
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePathNT -> FilePath
Newtypes.getFilePathNT (FilePathNT -> Pragma) -> m FilePathNT -> m Pragma
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m FilePathNT
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
forall (m :: * -> *). CabalParsing m => m FilePathNT
Parsec.parsec