{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE LambdaCase #-} module Control.Process.Handle( HasHandle(..) , AsHandle(..) ) where import Control.Category(id) import Control.Lens ( prism', Lens', Prism' ) import Data.Maybe ( Maybe(Nothing, Just) ) import System.IO ( Handle ) import System.Process ( StdStream(UseHandle) ) class HasHandle a where handle :: Lens' a Handle instance HasHandle Handle where handle :: (Handle -> f Handle) -> Handle -> f Handle handle = (Handle -> f Handle) -> Handle -> f Handle forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id class AsHandle a where _Handle :: Prism' a Handle instance AsHandle Handle where _Handle :: p Handle (f Handle) -> p Handle (f Handle) _Handle = p Handle (f Handle) -> p Handle (f Handle) forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id instance AsHandle StdStream where _Handle :: p Handle (f Handle) -> p StdStream (f StdStream) _Handle = (Handle -> StdStream) -> (StdStream -> Maybe Handle) -> Prism' StdStream Handle forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' Handle -> StdStream UseHandle (\case UseHandle Handle a -> Handle -> Maybe Handle forall a. a -> Maybe a Just Handle a StdStream _ -> Maybe Handle forall a. Maybe a Nothing )