{-# 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