{-# 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 =
    forall a. HasUserID a => Lens' a UserID
userID forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
      forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
        (\(CUid Word32
x) -> Word32
x)
        Word32 -> UserID
CUid

instance HasUserID UserID where
  userID :: Lens' UserID UserID
userID =
    forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id

class AsUserID a where
  _UserID ::
    Prism' a UserID
  _UserIDWord32 ::
    Prism' a Word32
  _UserIDWord32 =
    forall a. AsUserID a => Prism' a UserID
_UserID forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
      forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
        (\(CUid Word32
x) -> Word32
x)
        Word32 -> UserID
CUid

instance AsUserID UserID where
  _UserID :: Prism' UserID UserID
_UserID =
    forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id