-- | Arbitrary precision number representation
module Numeric.Limp.Rep.Arbitrary where
import Numeric.Limp.Rep.Rep

-- | A representation that uses arbitrary-sized Integers and Rationals
data Arbitrary

instance Rep Arbitrary where
 -- | Automatically defer numeric operations to the native int.
 newtype Z Arbitrary = Z Integer
    deriving (Ord,Eq,Integral,Real,Num,Enum)
 newtype R Arbitrary = R Rational
    deriving (Ord,Eq,Num,Enum,Fractional,Real,RealFrac)

-- | Define show manually, so we can strip out the "Z" and "R" prefixes.
instance Show (Z Arbitrary) where
 show (Z i) = show i

instance Show (R Arbitrary) where
 show (R i) = show i