{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE Rank2Types #-}
module System.Process.Microlens.StdStream
(
_Inherit
, _UseHandle
, _CreatePipe
, _NoStream
, IsCreatePipe(..)
, IsInherit(..)
, IsUseHandle(..)
, IsNoStream(..)
, inheriting
, piping
, handling
, nostreaming
) where
import Control.Applicative
import Lens.Micro
import System.IO (Handle)
import System.Process
_Inherit :: Traversal' StdStream StdStream
_Inherit :: (StdStream -> f StdStream) -> StdStream -> f StdStream
_Inherit f :: StdStream -> f StdStream
f s :: StdStream
s = case StdStream
s of
Inherit -> StdStream -> f StdStream
f StdStream
s
_ -> StdStream -> f StdStream
forall (f :: * -> *) a. Applicative f => a -> f a
pure StdStream
s
_UseHandle :: Traversal' StdStream Handle
_UseHandle :: (Handle -> f Handle) -> StdStream -> f StdStream
_UseHandle f :: Handle -> f Handle
f s :: StdStream
s = case StdStream
s of
UseHandle h :: Handle
h -> (Handle -> StdStream) -> f Handle -> f StdStream
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Handle -> StdStream
UseHandle (Handle -> f Handle
f Handle
h)
_ -> StdStream -> f StdStream
forall (f :: * -> *) a. Applicative f => a -> f a
pure StdStream
s
_CreatePipe :: Traversal' StdStream StdStream
_CreatePipe :: (StdStream -> f StdStream) -> StdStream -> f StdStream
_CreatePipe f :: StdStream -> f StdStream
f s :: StdStream
s = case StdStream
s of
CreatePipe -> StdStream -> f StdStream
f StdStream
s
_ -> StdStream -> f StdStream
forall (f :: * -> *) a. Applicative f => a -> f a
pure StdStream
s
_NoStream :: Traversal' StdStream StdStream
_NoStream :: (StdStream -> f StdStream) -> StdStream -> f StdStream
_NoStream f :: StdStream -> f StdStream
f s :: StdStream
s = case StdStream
s of
NoStream -> StdStream -> f StdStream
f StdStream
s
_ -> StdStream -> f StdStream
forall (f :: * -> *) a. Applicative f => a -> f a
pure StdStream
s
class IsInherit a where
_Inherits :: Traversal' a StdStream
{-# MINIMAL _Inherits #-}
instance IsInherit StdStream where
_Inherits :: (StdStream -> f StdStream) -> StdStream -> f StdStream
_Inherits = (StdStream -> f StdStream) -> StdStream -> f StdStream
Traversal' StdStream StdStream
_Inherit
class IsUseHandle a where
_UsesHandle :: Traversal' a Handle
{-# MINIMAL _UsesHandle #-}
instance IsUseHandle StdStream where
_UsesHandle :: (Handle -> f Handle) -> StdStream -> f StdStream
_UsesHandle = (Handle -> f Handle) -> StdStream -> f StdStream
Traversal' StdStream Handle
_UseHandle
class IsCreatePipe a where
_CreatesPipe :: Traversal' a StdStream
{-# MINIMAL _CreatesPipe #-}
instance IsCreatePipe StdStream where
_CreatesPipe :: (StdStream -> f StdStream) -> StdStream -> f StdStream
_CreatesPipe = (StdStream -> f StdStream) -> StdStream -> f StdStream
Traversal' StdStream StdStream
_CreatePipe
class IsNoStream a where
_NoStreams :: Traversal' a StdStream
{-# MINIMAL _NoStreams #-}
instance IsNoStream StdStream where
_NoStreams :: (StdStream -> f StdStream) -> StdStream -> f StdStream
_NoStreams = (StdStream -> f StdStream) -> StdStream -> f StdStream
Traversal' StdStream StdStream
_NoStream
inheriting :: Lens' a StdStream -> a -> a
inheriting :: Lens' a StdStream -> a -> a
inheriting l :: Lens' a StdStream
l = ASetter a a StdStream StdStream -> StdStream -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter a a StdStream StdStream
Lens' a StdStream
l StdStream
Inherit
piping :: Lens' a StdStream -> a -> a
piping :: Lens' a StdStream -> a -> a
piping l :: Lens' a StdStream
l = ASetter a a StdStream StdStream -> StdStream -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter a a StdStream StdStream
Lens' a StdStream
l StdStream
CreatePipe
handling :: Lens' a StdStream -> Handle -> a -> a
handling :: Lens' a StdStream -> Handle -> a -> a
handling l :: Lens' a StdStream
l h :: Handle
h = ASetter a a StdStream StdStream -> StdStream -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter a a StdStream StdStream
Lens' a StdStream
l (Handle -> StdStream
UseHandle Handle
h)
nostreaming :: Lens' a StdStream -> a -> a
nostreaming :: Lens' a StdStream -> a -> a
nostreaming l :: Lens' a StdStream
l = ASetter a a StdStream StdStream -> StdStream -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter a a StdStream StdStream
Lens' a StdStream
l StdStream
NoStream