{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE LambdaCase #-} module Control.Process.CmdSpec( AsCmdSpec(..) , HasCmdSpec(..) ) where import Control.Category ( Category(id, (.)) ) import Control.Lens ( Traversable(traverse), prism', Field1(_1), Field2(_2), Lens', Prism', Traversal' ) import Data.Maybe ( Maybe(Nothing, Just) ) import Data.Functor ( Functor(fmap) ) import Data.String ( String ) import Data.Tuple ( uncurry ) import System.FilePath ( FilePath ) import System.Process ( CreateProcess(..), CmdSpec(..) ) class AsCmdSpec a where _CmdSpec :: Prism' a CmdSpec _ShellCommand :: Prism' a String _ShellCommand = p CmdSpec (f CmdSpec) -> p a (f a) forall a. AsCmdSpec a => Prism' a CmdSpec _CmdSpec (p CmdSpec (f CmdSpec) -> p a (f a)) -> (p String (f String) -> p CmdSpec (f CmdSpec)) -> p String (f String) -> p a (f a) forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . p String (f String) -> p CmdSpec (f CmdSpec) forall a. AsCmdSpec a => Prism' a String _ShellCommand _RawCommand :: Prism' a (FilePath, [String]) _RawCommand = p CmdSpec (f CmdSpec) -> p a (f a) forall a. AsCmdSpec a => Prism' a CmdSpec _CmdSpec (p CmdSpec (f CmdSpec) -> p a (f a)) -> (p (String, [String]) (f (String, [String])) -> p CmdSpec (f CmdSpec)) -> p (String, [String]) (f (String, [String])) -> p a (f a) forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . p (String, [String]) (f (String, [String])) -> p CmdSpec (f CmdSpec) forall a. AsCmdSpec a => Prism' a (String, [String]) _RawCommand _RawCommandExe :: Traversal' a FilePath _RawCommandExe = ((String, [String]) -> f (String, [String])) -> a -> f a forall a. AsCmdSpec a => Prism' a (String, [String]) _RawCommand (((String, [String]) -> f (String, [String])) -> a -> f a) -> ((String -> f String) -> (String, [String]) -> f (String, [String])) -> (String -> f String) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (String -> f String) -> (String, [String]) -> f (String, [String]) forall s t a b. Field1 s t a b => Lens s t a b _1 _RawCommandArgumentList :: Traversal' a [String] _RawCommandArgumentList = ((String, [String]) -> f (String, [String])) -> a -> f a forall a. AsCmdSpec a => Prism' a (String, [String]) _RawCommand (((String, [String]) -> f (String, [String])) -> a -> f a) -> (([String] -> f [String]) -> (String, [String]) -> f (String, [String])) -> ([String] -> f [String]) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ([String] -> f [String]) -> (String, [String]) -> f (String, [String]) forall s t a b. Field2 s t a b => Lens s t a b _2 _RawCommandArguments :: Traversal' a String _RawCommandArguments = ([String] -> f [String]) -> a -> f a forall a. AsCmdSpec a => Traversal' a [String] _RawCommandArgumentList (([String] -> f [String]) -> a -> f a) -> ((String -> f String) -> [String] -> f [String]) -> (String -> f String) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (String -> f String) -> [String] -> f [String] forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse instance AsCmdSpec CmdSpec where _CmdSpec :: p CmdSpec (f CmdSpec) -> p CmdSpec (f CmdSpec) _CmdSpec = p CmdSpec (f CmdSpec) -> p CmdSpec (f CmdSpec) forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id _ShellCommand :: p String (f String) -> p CmdSpec (f CmdSpec) _ShellCommand = (String -> CmdSpec) -> (CmdSpec -> Maybe String) -> Prism' CmdSpec String forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' String -> CmdSpec ShellCommand (\case ShellCommand String a -> String -> Maybe String forall a. a -> Maybe a Just String a CmdSpec _ -> Maybe String forall a. Maybe a Nothing ) _RawCommand :: p (String, [String]) (f (String, [String])) -> p CmdSpec (f CmdSpec) _RawCommand = ((String, [String]) -> CmdSpec) -> (CmdSpec -> Maybe (String, [String])) -> Prism' CmdSpec (String, [String]) forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' ((String -> [String] -> CmdSpec) -> (String, [String]) -> CmdSpec forall a b c. (a -> b -> c) -> (a, b) -> c uncurry String -> [String] -> CmdSpec RawCommand) (\case RawCommand String a [String] b -> (String, [String]) -> Maybe (String, [String]) forall a. a -> Maybe a Just (String a, [String] b) CmdSpec _ -> Maybe (String, [String]) forall a. Maybe a Nothing ) class HasCmdSpec a where cmdSpec :: Lens' a CmdSpec shellCommand :: Traversal' a String shellCommand = (CmdSpec -> f CmdSpec) -> a -> f a forall a. HasCmdSpec a => Lens' a CmdSpec cmdSpec ((CmdSpec -> f CmdSpec) -> a -> f a) -> ((String -> f String) -> CmdSpec -> f CmdSpec) -> (String -> f String) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (String -> f String) -> CmdSpec -> f CmdSpec forall a. AsCmdSpec a => Prism' a String _ShellCommand rawCommand :: Traversal' a (FilePath, [String]) rawCommand = (CmdSpec -> f CmdSpec) -> a -> f a forall a. HasCmdSpec a => Lens' a CmdSpec cmdSpec ((CmdSpec -> f CmdSpec) -> a -> f a) -> (((String, [String]) -> f (String, [String])) -> CmdSpec -> f CmdSpec) -> ((String, [String]) -> f (String, [String])) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ((String, [String]) -> f (String, [String])) -> CmdSpec -> f CmdSpec forall a. AsCmdSpec a => Prism' a (String, [String]) _RawCommand rawCommandExe :: Traversal' a FilePath rawCommandExe = ((String, [String]) -> f (String, [String])) -> a -> f a forall a. HasCmdSpec a => Traversal' a (String, [String]) rawCommand (((String, [String]) -> f (String, [String])) -> a -> f a) -> ((String -> f String) -> (String, [String]) -> f (String, [String])) -> (String -> f String) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (String -> f String) -> (String, [String]) -> f (String, [String]) forall s t a b. Field1 s t a b => Lens s t a b _1 rawCommandArgumentList :: Traversal' a [String] rawCommandArgumentList = ((String, [String]) -> f (String, [String])) -> a -> f a forall a. HasCmdSpec a => Traversal' a (String, [String]) rawCommand (((String, [String]) -> f (String, [String])) -> a -> f a) -> (([String] -> f [String]) -> (String, [String]) -> f (String, [String])) -> ([String] -> f [String]) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ([String] -> f [String]) -> (String, [String]) -> f (String, [String]) forall s t a b. Field2 s t a b => Lens s t a b _2 rawCommandArguments :: Traversal' a String rawCommandArguments = ([String] -> f [String]) -> a -> f a forall a. HasCmdSpec a => Traversal' a [String] rawCommandArgumentList (([String] -> f [String]) -> a -> f a) -> ((String -> f String) -> [String] -> f [String]) -> (String -> f String) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (String -> f String) -> [String] -> f [String] forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse instance HasCmdSpec CmdSpec where cmdSpec :: (CmdSpec -> f CmdSpec) -> CmdSpec -> f CmdSpec cmdSpec = (CmdSpec -> f CmdSpec) -> CmdSpec -> f CmdSpec forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id instance HasCmdSpec CreateProcess where cmdSpec :: (CmdSpec -> f CmdSpec) -> CreateProcess -> f CreateProcess cmdSpec CmdSpec -> f CmdSpec f (CreateProcess CmdSpec csc Maybe String cw Maybe [(String, String)] en StdStream sti StdStream sto StdStream ste Bool clf Bool crg Bool dct Bool dcl Bool cnc Bool nss Maybe GroupID chg Maybe UserID chu Bool upj) = (CmdSpec -> CreateProcess) -> f CmdSpec -> f CreateProcess forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\CmdSpec csc' -> CmdSpec -> Maybe String -> Maybe [(String, String)] -> StdStream -> StdStream -> StdStream -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe GroupID -> Maybe UserID -> Bool -> CreateProcess CreateProcess CmdSpec csc' Maybe String cw Maybe [(String, String)] en StdStream sti StdStream sto StdStream ste Bool clf Bool crg Bool dct Bool dcl Bool cnc Bool nss Maybe GroupID chg Maybe UserID chu Bool upj) (CmdSpec -> f CmdSpec f CmdSpec csc)