packages feed

exitcode-0.1.0.6: src/Control/Process/UserID.hs

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

module Control.Process.UserID(
  HasUserID(..)
, AsUserID(..)
) where

import Control.Category((.), id)
import Control.Lens ( iso, Lens', Prism' )
import Data.Word ( Word32 )
import System.Posix.Types ( CUid(CUid) )
import System.Process.Internals ( UserID )

class HasUserID a where
  userID ::
    Lens' a UserID
  userIDWord32 ::
    Lens' a Word32
  userIDWord32 =
    userID .
      iso
        (\(CUid x) -> x)
        CUid

instance HasUserID UserID where
  userID =
    id

class AsUserID a where
  _UserID ::
    Prism' a UserID
  _UserIDWord32 ::
    Prism' a Word32
  _UserIDWord32 =
    _UserID .
      iso
        (\(CUid x) -> x)
        CUid

instance AsUserID UserID where
  _UserID =
    id