{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE LambdaCase #-} module Control.Process.StdStream( StdStream(..) , AsStdStream(..) , HasStdStream(..) ) where import Control.Category ( Category(id, (.)) ) import Control.Lens ( prism', Lens', Prism' ) import Data.Maybe ( Maybe(Nothing, Just) ) import System.Process ( StdStream(..) ) class AsStdStream a where _StdStream :: Prism' a StdStream _Inherit :: Prism' a () _Inherit = p StdStream (f StdStream) -> p a (f a) forall a. AsStdStream a => Prism' a StdStream _StdStream (p StdStream (f StdStream) -> p a (f a)) -> (p () (f ()) -> p StdStream (f StdStream)) -> p () (f ()) -> 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 () (f ()) -> p StdStream (f StdStream) forall a. AsStdStream a => Prism' a () _Inherit _CreatePipe :: Prism' a () _CreatePipe = p StdStream (f StdStream) -> p a (f a) forall a. AsStdStream a => Prism' a StdStream _StdStream (p StdStream (f StdStream) -> p a (f a)) -> (p () (f ()) -> p StdStream (f StdStream)) -> p () (f ()) -> 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 () (f ()) -> p StdStream (f StdStream) forall a. AsStdStream a => Prism' a () _CreatePipe _NoStream :: Prism' a () _NoStream = p StdStream (f StdStream) -> p a (f a) forall a. AsStdStream a => Prism' a StdStream _StdStream (p StdStream (f StdStream) -> p a (f a)) -> (p () (f ()) -> p StdStream (f StdStream)) -> p () (f ()) -> 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 () (f ()) -> p StdStream (f StdStream) forall a. AsStdStream a => Prism' a () _NoStream instance AsStdStream StdStream where _StdStream :: p StdStream (f StdStream) -> p StdStream (f StdStream) _StdStream = p StdStream (f StdStream) -> p StdStream (f StdStream) forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id _Inherit :: p () (f ()) -> p StdStream (f StdStream) _Inherit = (() -> StdStream) -> (StdStream -> Maybe ()) -> Prism' StdStream () forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' (\() -> StdStream Inherit) (\case StdStream Inherit -> () -> Maybe () forall a. a -> Maybe a Just () StdStream _ -> Maybe () forall a. Maybe a Nothing ) _CreatePipe :: p () (f ()) -> p StdStream (f StdStream) _CreatePipe = (() -> StdStream) -> (StdStream -> Maybe ()) -> Prism' StdStream () forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' (\() -> StdStream CreatePipe) (\case StdStream CreatePipe -> () -> Maybe () forall a. a -> Maybe a Just () StdStream _ -> Maybe () forall a. Maybe a Nothing ) _NoStream :: p () (f ()) -> p StdStream (f StdStream) _NoStream = (() -> StdStream) -> (StdStream -> Maybe ()) -> Prism' StdStream () forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' (\() -> StdStream NoStream) (\case StdStream NoStream -> () -> Maybe () forall a. a -> Maybe a Just () StdStream _ -> Maybe () forall a. Maybe a Nothing ) class HasStdStream a where stdStream :: Lens' a StdStream instance HasStdStream StdStream where stdStream :: (StdStream -> f StdStream) -> StdStream -> f StdStream stdStream = (StdStream -> f StdStream) -> StdStream -> f StdStream forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id