{-# LANGUAGE AllowAmbiguousTypes #-}
module Generic.Data.Function.Common.TypeLits where
import GHC.TypeNats ( Natural, KnownNat, natVal' )
import GHC.TypeLits ( KnownSymbol, symbolVal' )
import GHC.Exts ( proxy#, Proxy# )
natVal'' :: forall n. KnownNat n => Natural
natVal'' :: forall (n :: Nat). KnownNat n => Nat
natVal'' = Proxy# n -> Nat
forall (n :: Nat). KnownNat n => Proxy# n -> Nat
natVal' (Proxy# n
forall {k} (a :: k). Proxy# a
proxy# :: Proxy# n)
{-# INLINE natVal'' #-}
natValInt :: forall n. KnownNat n => Int
natValInt :: forall (n :: Nat). KnownNat n => Int
natValInt = Nat -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Nat -> Int) -> Nat -> Int
forall a b. (a -> b) -> a -> b
$ forall (n :: Nat). KnownNat n => Nat
natVal'' @n
{-# INLINE natValInt #-}
symbolVal'' :: forall sym. KnownSymbol sym => String
symbolVal'' :: forall (sym :: Symbol). KnownSymbol sym => String
symbolVal'' = Proxy# sym -> String
forall (n :: Symbol). KnownSymbol n => Proxy# n -> String
symbolVal' (Proxy# sym
forall {k} (a :: k). Proxy# a
proxy# :: Proxy# sym)
{-# INLINE symbolVal'' #-}