packages feed

exitcode-0.3.0.0: src/Control/Process/ProcessHandle.hs

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

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

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

-- | Type class for values that can be viewed as a @ProcessHandle@.
class GetProcessHandle a where
  getProcessHandle ::
    Getter a ProcessHandle

instance GetProcessHandle ProcessHandle where
  getProcessHandle = id
  {-# INLINE getProcessHandle #-}

-- | Type class for values with a lens into a @ProcessHandle@.
class (GetProcessHandle a) => HasProcessHandle a where
  processHandle ::
    Lens' a ProcessHandle

instance HasProcessHandle ProcessHandle where
  processHandle =
    id

-- | Type class for values that can be constructed from a @ProcessHandle@.
class ReviewProcessHandle a where
  reviewProcessHandle ::
    Review a ProcessHandle

instance ReviewProcessHandle ProcessHandle where
  reviewProcessHandle = unto id
  {-# INLINE reviewProcessHandle #-}

-- | Type class for values with a prism into a @ProcessHandle@.
class (ReviewProcessHandle a) => AsProcessHandle a where
  _ProcessHandle ::
    Prism' a ProcessHandle

instance AsProcessHandle ProcessHandle where
  _ProcessHandle =
    id