{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TypeFamilies #-} module Development.IDE.Graph.Internal.Rules where import qualified Development.Shake as Shake import qualified Development.Shake.Rule as Shake import Development.Shake.Classes import Development.IDE.Graph.Internal.Action import Control.Monad.IO.Class import Control.Monad.Fail import qualified Data.ByteString as BS newtype Rules a = Rules {Rules a -> Rules a fromRules :: Shake.Rules a} deriving (Semigroup (Rules a) Rules a Semigroup (Rules a) -> Rules a -> (Rules a -> Rules a -> Rules a) -> ([Rules a] -> Rules a) -> Monoid (Rules a) [Rules a] -> Rules a Rules a -> Rules a -> Rules a forall a. Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a forall a. Monoid a => Semigroup (Rules a) forall a. Monoid a => Rules a forall a. Monoid a => [Rules a] -> Rules a forall a. Monoid a => Rules a -> Rules a -> Rules a mconcat :: [Rules a] -> Rules a $cmconcat :: forall a. Monoid a => [Rules a] -> Rules a mappend :: Rules a -> Rules a -> Rules a $cmappend :: forall a. Monoid a => Rules a -> Rules a -> Rules a mempty :: Rules a $cmempty :: forall a. Monoid a => Rules a $cp1Monoid :: forall a. Monoid a => Semigroup (Rules a) Monoid, b -> Rules a -> Rules a NonEmpty (Rules a) -> Rules a Rules a -> Rules a -> Rules a (Rules a -> Rules a -> Rules a) -> (NonEmpty (Rules a) -> Rules a) -> (forall b. Integral b => b -> Rules a -> Rules a) -> Semigroup (Rules a) forall b. Integral b => b -> Rules a -> Rules a forall a. Semigroup a => NonEmpty (Rules a) -> Rules a forall a. Semigroup a => Rules a -> Rules a -> Rules a forall a b. (Semigroup a, Integral b) => b -> Rules a -> Rules a forall a. (a -> a -> a) -> (NonEmpty a -> a) -> (forall b. Integral b => b -> a -> a) -> Semigroup a stimes :: b -> Rules a -> Rules a $cstimes :: forall a b. (Semigroup a, Integral b) => b -> Rules a -> Rules a sconcat :: NonEmpty (Rules a) -> Rules a $csconcat :: forall a. Semigroup a => NonEmpty (Rules a) -> Rules a <> :: Rules a -> Rules a -> Rules a $c<> :: forall a. Semigroup a => Rules a -> Rules a -> Rules a Semigroup, Applicative Rules a -> Rules a Applicative Rules -> (forall a b. Rules a -> (a -> Rules b) -> Rules b) -> (forall a b. Rules a -> Rules b -> Rules b) -> (forall a. a -> Rules a) -> Monad Rules Rules a -> (a -> Rules b) -> Rules b Rules a -> Rules b -> Rules b forall a. a -> Rules a forall a b. Rules a -> Rules b -> Rules b forall a b. Rules a -> (a -> Rules b) -> Rules b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: a -> Rules a $creturn :: forall a. a -> Rules a >> :: Rules a -> Rules b -> Rules b $c>> :: forall a b. Rules a -> Rules b -> Rules b >>= :: Rules a -> (a -> Rules b) -> Rules b $c>>= :: forall a b. Rules a -> (a -> Rules b) -> Rules b $cp1Monad :: Applicative Rules Monad, Functor Rules a -> Rules a Functor Rules -> (forall a. a -> Rules a) -> (forall a b. Rules (a -> b) -> Rules a -> Rules b) -> (forall a b c. (a -> b -> c) -> Rules a -> Rules b -> Rules c) -> (forall a b. Rules a -> Rules b -> Rules b) -> (forall a b. Rules a -> Rules b -> Rules a) -> Applicative Rules Rules a -> Rules b -> Rules b Rules a -> Rules b -> Rules a Rules (a -> b) -> Rules a -> Rules b (a -> b -> c) -> Rules a -> Rules b -> Rules c forall a. a -> Rules a forall a b. Rules a -> Rules b -> Rules a forall a b. Rules a -> Rules b -> Rules b forall a b. Rules (a -> b) -> Rules a -> Rules b forall a b c. (a -> b -> c) -> Rules a -> Rules b -> Rules c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f <* :: Rules a -> Rules b -> Rules a $c<* :: forall a b. Rules a -> Rules b -> Rules a *> :: Rules a -> Rules b -> Rules b $c*> :: forall a b. Rules a -> Rules b -> Rules b liftA2 :: (a -> b -> c) -> Rules a -> Rules b -> Rules c $cliftA2 :: forall a b c. (a -> b -> c) -> Rules a -> Rules b -> Rules c <*> :: Rules (a -> b) -> Rules a -> Rules b $c<*> :: forall a b. Rules (a -> b) -> Rules a -> Rules b pure :: a -> Rules a $cpure :: forall a. a -> Rules a $cp1Applicative :: Functor Rules Applicative, a -> Rules b -> Rules a (a -> b) -> Rules a -> Rules b (forall a b. (a -> b) -> Rules a -> Rules b) -> (forall a b. a -> Rules b -> Rules a) -> Functor Rules forall a b. a -> Rules b -> Rules a forall a b. (a -> b) -> Rules a -> Rules b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> Rules b -> Rules a $c<$ :: forall a b. a -> Rules b -> Rules a fmap :: (a -> b) -> Rules a -> Rules b $cfmap :: forall a b. (a -> b) -> Rules a -> Rules b Functor, Monad Rules Monad Rules -> (forall a. IO a -> Rules a) -> MonadIO Rules IO a -> Rules a forall a. IO a -> Rules a forall (m :: * -> *). Monad m -> (forall a. IO a -> m a) -> MonadIO m liftIO :: IO a -> Rules a $cliftIO :: forall a. IO a -> Rules a $cp1MonadIO :: Monad Rules MonadIO, Monad Rules Monad Rules -> (forall a. String -> Rules a) -> MonadFail Rules String -> Rules a forall a. String -> Rules a forall (m :: * -> *). Monad m -> (forall a. String -> m a) -> MonadFail m fail :: String -> Rules a $cfail :: forall a. String -> Rules a $cp1MonadFail :: Monad Rules MonadFail) action :: Action a -> Rules () action :: Action a -> Rules () action = Rules () -> Rules () forall a. Rules a -> Rules a Rules (Rules () -> Rules ()) -> (Action a -> Rules ()) -> Action a -> Rules () forall b c a. (b -> c) -> (a -> b) -> a -> c . Action a -> Rules () forall a. Partial => Action a -> Rules () Shake.action (Action a -> Rules ()) -> (Action a -> Action a) -> Action a -> Rules () forall b c a. (b -> c) -> (a -> b) -> a -> c . Action a -> Action a forall a. Action a -> Action a fromAction addRule :: (Shake.RuleResult key ~ value, Shake.ShakeValue key, Typeable value, NFData value, Show value) => (key -> Maybe BS.ByteString -> Shake.RunMode -> Action (Shake.RunResult value)) -> Rules () addRule :: (key -> Maybe ByteString -> RunMode -> Action (RunResult value)) -> Rules () addRule key -> Maybe ByteString -> RunMode -> Action (RunResult value) f = Rules () -> Rules () forall a. Rules a -> Rules a Rules (Rules () -> Rules ()) -> Rules () -> Rules () forall a b. (a -> b) -> a -> b $ BuiltinLint key value -> BuiltinIdentity key value -> BuiltinRun key value -> Rules () forall key value. (RuleResult key ~ value, ShakeValue key, Typeable value, NFData value, Show value, Partial) => BuiltinLint key value -> BuiltinIdentity key value -> BuiltinRun key value -> Rules () Shake.addBuiltinRule BuiltinLint key value forall key value. BuiltinLint key value Shake.noLint BuiltinIdentity key value forall key value. BuiltinIdentity key value Shake.noIdentity (BuiltinRun key value -> Rules ()) -> BuiltinRun key value -> Rules () forall a b. (a -> b) -> a -> b $ \key k Maybe ByteString bs RunMode r -> Action (RunResult value) -> Action (RunResult value) forall a. Action a -> Action a fromAction (Action (RunResult value) -> Action (RunResult value)) -> Action (RunResult value) -> Action (RunResult value) forall a b. (a -> b) -> a -> b $ key -> Maybe ByteString -> RunMode -> Action (RunResult value) f key k Maybe ByteString bs RunMode r