packages feed

netw-0.1.0.0: src/Netw/Internal/Ancillary.hsc

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
module Netw.Internal.Ancillary where
import GHC.TypeLits
import Data.Proxy
#include <sys/socket.h>

type UNIX_CONTROL_MESSAGE_RIGHTS = '(#{const SOL_SOCKET}, #{const SCM_RIGHTS})

class KnownNatPair (p :: (Nat, Nat)) where
  {-# MINIMAL fstNatVal, sndNatVal | natPairVal #-}
  natPairVal :: (Integer, Integer)
  natPairVal = (fstNatVal @p, sndNatVal @p)

  fstNatVal :: Integer
  fstNatVal = fst (natPairVal @p)

  sndNatVal :: Integer
  sndNatVal = snd (natPairVal @p)

instance (KnownNat a, KnownNat b) => KnownNatPair '(a, b) where
  fstNatVal = natVal @a Proxy
  sndNatVal = natVal @b Proxy