{-# 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 :: Lens' Handle Handle 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 :: Prism' Handle Handle _Handle = forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a id instance AsHandle StdStream where _Handle :: Prism' StdStream Handle _Handle = forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' Handle -> StdStream UseHandle (\case UseHandle Handle a -> forall a. a -> Maybe a Just Handle a StdStream _ -> forall a. Maybe a Nothing )