{-#LANGUAGE DeriveDataTypeable #-} module Test.Feat.Internals.Newtypes ( Infinite(..), Nat(..), NonZero(..) )where import Data.Typeable -- | A class of infinite precision integral types. 'Integer' is the principal -- class member. class (Typeable a, Integral a) => Infinite a instance Infinite Integer -- | A type of (infinite precision) natural numbers such that @ nat a >= 0 @. newtype Nat a = Nat {nat :: a} deriving (Typeable, Show, Eq, Ord) -- | A type of (infinite precision) non-zero integers such that @ nonZero a /= 0 @. newtype NonZero a = NonZero {nonZero :: a} deriving (Typeable, Show, Eq, Ord)