{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Control.Process.ProcessHandle(
  HasProcessHandle(..)
, AsProcessHandle(..)
) where

import Control.Category(id)
import System.Process ( ProcessHandle )
import Control.Lens ( Lens', Prism' )

class HasProcessHandle a where
  processHandle ::
    Lens' a ProcessHandle

instance HasProcessHandle ProcessHandle where
  processHandle :: (ProcessHandle -> f ProcessHandle)
-> ProcessHandle -> f ProcessHandle
processHandle =
    (ProcessHandle -> f ProcessHandle)
-> ProcessHandle -> f ProcessHandle
forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id

class AsProcessHandle a where
  _ProcessHandle ::
    Prism' a ProcessHandle

instance AsProcessHandle ProcessHandle where
  _ProcessHandle :: p ProcessHandle (f ProcessHandle)
-> p ProcessHandle (f ProcessHandle)
_ProcessHandle =
    p ProcessHandle (f ProcessHandle)
-> p ProcessHandle (f ProcessHandle)
forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id