packages feed

arithmoi-0.6.0.0: GHC/TypeNats/Compat.hs

{-# LANGUAGE CPP         #-}

{-# OPTIONS_HADDOCK hide #-}

#if MIN_VERSION_base(4,10,0)

module GHC.TypeNats.Compat
  ( module GHC.TypeNats
  ) where

import GHC.TypeNats

#else

module GHC.TypeNats.Compat
  ( Nat
  , KnownNat
  , SomeNat(..)
  , natVal
  , someNatVal
  , sameNat
  ) where

import GHC.TypeLits (Nat, KnownNat, SomeNat(..), sameNat)
import qualified GHC.TypeLits as TL
import Numeric.Natural

natVal :: KnownNat n => proxy n -> Natural
natVal = fromInteger . TL.natVal

someNatVal :: Natural -> SomeNat
someNatVal n = case TL.someNatVal (toInteger n) of
  Nothing -> error "someNatVal: impossible negative argument"
  Just sn -> sn

#endif