{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TypeSynonymInstances #-} module Control.Process.FD( HasFD(..) , AsFD(..) ) where import Control.Category((.), id) import Control.Lens ( iso, Lens', Prism' ) import Data.Int ( Int32 ) import Foreign.C.Types ( CInt(CInt) ) import System.Posix.Internals ( FD ) class HasFD a where fd :: Lens' a FD fdInt32 :: Lens' a Int32 fdInt32 = forall a. HasFD a => Lens' a FD fd 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 (\(CInt Int32 x) -> Int32 x) Int32 -> FD CInt instance HasFD FD where fd :: Lens' FD FD fd = forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a id class AsFD a where _FD :: Prism' a FD _FDInt32 :: Prism' a Int32 _FDInt32 = forall a. AsFD a => Prism' a FD _FD 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 (\(CInt Int32 x) -> Int32 x) Int32 -> FD CInt instance AsFD FD where _FD :: Prism' FD FD _FD = forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a id