exitcode-0.3.0.0: src/Control/Process/Pid.hs
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wall #-}
module Control.Process.Pid
( Pid,
GetPid (..),
HasPid (..),
ReviewPid (..),
AsPid (..),
)
where
import Control.Category (id, (.))
import Control.Lens (Getter, Lens', Prism', Review, iso, unto)
import Data.Int (Int32)
import System.Posix.Types (CPid (CPid))
import System.Process (Pid)
-- $setup
-- >>> import Prelude
-- >>> import Control.Lens
-- | Type class for values that can be viewed as a @Pid@.
--
-- >>> view viewPid (CPid 42)
-- 42
class GetPid a where
viewPid ::
Getter a Pid
{-# INLINE viewPidInt32 #-}
viewPidInt32 ::
Getter a Int32
viewPidInt32 =
viewPid
. iso
(\(CPid x) -> x)
CPid
-- |
--
-- >>> view viewPid (CPid 42)
-- 42
-- >>> view viewPidInt32 (CPid 42)
-- 42
instance GetPid Pid where
viewPid = id
{-# INLINE viewPid #-}
-- | Type class for values with a lens into a @Pid@.
--
-- >>> view pid (CPid 42)
-- 42
class (GetPid a) => HasPid a where
pid ::
Lens' a Pid
{-# INLINE pidInt32 #-}
pidInt32 ::
Lens' a Int32
pidInt32 =
pid
. iso
(\(CPid x) -> x)
CPid
-- |
--
-- >>> view pid (CPid 42)
-- 42
-- >>> view pidInt32 (CPid 42)
-- 42
-- >>> set pidInt32 99 (CPid 42)
-- 99
instance HasPid Pid where
pid =
id
-- | Type class for values that can be constructed from a @Pid@.
--
-- >>> review reviewPid (CPid 42) :: Pid
-- 42
class ReviewPid a where
reviewPid ::
Review a Pid
{-# INLINE reviewPidInt32 #-}
reviewPidInt32 ::
Review a Int32
reviewPidInt32 =
reviewPid
. iso
(\(CPid x) -> x)
CPid
-- |
--
-- >>> review reviewPid (CPid 42) :: Pid
-- 42
-- >>> review reviewPidInt32 99 :: Pid
-- 99
instance ReviewPid Pid where
reviewPid = unto id
{-# INLINE reviewPid #-}
-- | Type class for values with a prism into a @Pid@.
--
-- >>> preview _Pid (CPid 42)
-- Just 42
class (ReviewPid a) => AsPid a where
_Pid ::
Prism' a Pid
{-# INLINE _PidInt32 #-}
_PidInt32 ::
Prism' a Int32
_PidInt32 =
_Pid
. iso
(\(CPid x) -> x)
CPid
-- |
--
-- >>> preview _Pid (CPid 42)
-- Just 42
-- >>> preview _PidInt32 (CPid 42)
-- Just 42
-- >>> review _PidInt32 99 :: Pid
-- 99
instance AsPid Pid where
_Pid =
id