{-# 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 -> f UserID) -> a -> f a forall a. HasUserID a => Lens' a UserID userID ((UserID -> f UserID) -> a -> f a) -> ((Word32 -> f Word32) -> UserID -> f UserID) -> (Word32 -> f Word32) -> a -> f a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (UserID -> Word32) -> (Word32 -> UserID) -> Iso UserID UserID Word32 Word32 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 :: (UserID -> f UserID) -> UserID -> f UserID userID = (UserID -> f UserID) -> UserID -> f 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 = p UserID (f UserID) -> p a (f a) forall a. AsUserID a => Prism' a UserID _UserID (p UserID (f UserID) -> p a (f a)) -> (p Word32 (f Word32) -> p UserID (f UserID)) -> p Word32 (f Word32) -> p a (f a) forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (UserID -> Word32) -> (Word32 -> UserID) -> Iso UserID UserID Word32 Word32 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 :: p UserID (f UserID) -> p UserID (f UserID) _UserID = p UserID (f UserID) -> p UserID (f UserID) forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a id