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