{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
module AERN2.MP.WithCurrentPrec.PreludeInstances
(
_example1P , _example2P , _example3P
)
where
import Prelude
import Numeric.CollectErrors (cn, CN)
import GHC.TypeLits
import AERN2.MP.Precision
import AERN2.MP.Ball
import AERN2.MP.WithCurrentPrec.Type
instance Eq t => Eq (WithCurrentPrec p t) where
== :: WithCurrentPrec p t -> WithCurrentPrec p t -> Bool
(==) = (t -> t -> Bool)
-> WithCurrentPrec p t -> WithCurrentPrec p t -> Bool
forall k (p1 :: k) (p2 :: k) t1 t2 t3.
(p1 ~ p2) =>
(t1 -> t2 -> t3)
-> WithCurrentPrec p1 t1 -> WithCurrentPrec p2 t2 -> t3
lift2P t -> t -> Bool
forall a. Eq a => a -> a -> Bool
(==)
instance Ord t => Ord (WithCurrentPrec p t) where
compare :: WithCurrentPrec p t -> WithCurrentPrec p t -> Ordering
compare = (t -> t -> Ordering)
-> WithCurrentPrec p t -> WithCurrentPrec p t -> Ordering
forall k (p1 :: k) (p2 :: k) t1 t2 t3.
(p1 ~ p2) =>
(t1 -> t2 -> t3)
-> WithCurrentPrec p1 t1 -> WithCurrentPrec p2 t2 -> t3
lift2P t -> t -> Ordering
forall a. Ord a => a -> a -> Ordering
compare
instance
(KnownNat p, Num t, ConvertibleWithPrecision Integer t)
=>
Num (WithCurrentPrec p t)
where
fromInteger :: Integer -> WithCurrentPrec p t
fromInteger Integer
n = WithCurrentPrec p t
r
where
r :: WithCurrentPrec p t
r = t -> WithCurrentPrec p t
forall k (p :: k) t. t -> WithCurrentPrec p t
WithCurrentPrec (t -> WithCurrentPrec p t) -> t -> WithCurrentPrec p t
forall a b. (a -> b) -> a -> b
$ Precision -> Integer -> t
forall t1 t2.
ConvertibleWithPrecision t1 t2 =>
Precision -> t1 -> t2
convertP (WithCurrentPrec p t -> Precision
forall (p :: Nat) t. KnownNat p => WithCurrentPrec p t -> Precision
getCurrentPrecision WithCurrentPrec p t
r) Integer
n
negate :: WithCurrentPrec p t -> WithCurrentPrec p t
negate = (t -> t) -> WithCurrentPrec p t -> WithCurrentPrec p t
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 t -> t
forall a. Num a => a -> a
negate
abs :: WithCurrentPrec p t -> WithCurrentPrec p t
abs = (t -> t) -> WithCurrentPrec p t -> WithCurrentPrec p t
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 t -> t
forall a. Num a => a -> a
abs
+ :: WithCurrentPrec p t -> WithCurrentPrec p t -> WithCurrentPrec p t
(+) = (t -> t -> t)
-> WithCurrentPrec p t
-> WithCurrentPrec p t
-> WithCurrentPrec p t
forall k (p1 :: k) (p2 :: k) t1 t2 t3.
(p1 ~ p2) =>
(t1 -> t2 -> t3)
-> WithCurrentPrec p1 t1
-> WithCurrentPrec p2 t2
-> WithCurrentPrec p1 t3
lift2 t -> t -> t
forall a. Num a => a -> a -> a
(+)
* :: WithCurrentPrec p t -> WithCurrentPrec p t -> WithCurrentPrec p t
(*) = (t -> t -> t)
-> WithCurrentPrec p t
-> WithCurrentPrec p t
-> WithCurrentPrec p t
forall k (p1 :: k) (p2 :: k) t1 t2 t3.
(p1 ~ p2) =>
(t1 -> t2 -> t3)
-> WithCurrentPrec p1 t1
-> WithCurrentPrec p2 t2
-> WithCurrentPrec p1 t3
lift2 t -> t -> t
forall a. Num a => a -> a -> a
(*)
signum :: WithCurrentPrec p t -> WithCurrentPrec p t
signum = (t -> t) -> WithCurrentPrec p t -> WithCurrentPrec p t
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 t -> t
forall a. Num a => a -> a
signum
instance
(KnownNat p, Fractional t
, ConvertibleWithPrecision Integer t, ConvertibleWithPrecision Rational t)
=>
Fractional (WithCurrentPrec p t)
where
fromRational :: Rational -> WithCurrentPrec p t
fromRational Rational
q = WithCurrentPrec p t
r
where
r :: WithCurrentPrec p t
r = t -> WithCurrentPrec p t
forall k (p :: k) t. t -> WithCurrentPrec p t
WithCurrentPrec (t -> WithCurrentPrec p t) -> t -> WithCurrentPrec p t
forall a b. (a -> b) -> a -> b
$ Precision -> Rational -> t
forall t1 t2.
ConvertibleWithPrecision t1 t2 =>
Precision -> t1 -> t2
convertP (WithCurrentPrec p t -> Precision
forall (p :: Nat) t. KnownNat p => WithCurrentPrec p t -> Precision
getCurrentPrecision WithCurrentPrec p t
r) Rational
q
recip :: WithCurrentPrec p t -> WithCurrentPrec p t
recip = (t -> t) -> WithCurrentPrec p t -> WithCurrentPrec p t
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 t -> t
forall a. Fractional a => a -> a
recip
/ :: WithCurrentPrec p t -> WithCurrentPrec p t -> WithCurrentPrec p t
(/) = (t -> t -> t)
-> WithCurrentPrec p t
-> WithCurrentPrec p t
-> WithCurrentPrec p t
forall k (p1 :: k) (p2 :: k) t1 t2 t3.
(p1 ~ p2) =>
(t1 -> t2 -> t3)
-> WithCurrentPrec p1 t1
-> WithCurrentPrec p2 t2
-> WithCurrentPrec p1 t3
lift2 t -> t -> t
forall a. Fractional a => a -> a -> a
(/)
instance (KnownNat p) => Floating (WithCurrentPrec p (CN MPBall)) where
pi :: WithCurrentPrec p (CN MPBall)
pi = WithCurrentPrec p (CN MPBall)
r
where
r :: WithCurrentPrec p (CN MPBall)
r = CN MPBall -> WithCurrentPrec p (CN MPBall)
forall k (p :: k) t. t -> WithCurrentPrec p t
WithCurrentPrec (CN MPBall -> WithCurrentPrec p (CN MPBall))
-> CN MPBall -> WithCurrentPrec p (CN MPBall)
forall a b. (a -> b) -> a -> b
$ MPBall -> CN MPBall
forall v. v -> CN v
cn (MPBall -> CN MPBall) -> MPBall -> CN MPBall
forall a b. (a -> b) -> a -> b
$ Precision -> MPBall
piBallP (WithCurrentPrec p (CN MPBall) -> Precision
forall (p :: Nat) t. KnownNat p => WithCurrentPrec p t -> Precision
getCurrentPrecision WithCurrentPrec p (CN MPBall)
r)
sqrt :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
sqrt = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
sqrt
exp :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
exp = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
exp
log :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
log = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
log
sin :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
sin = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
sin
cos :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
cos = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
cos
asin :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
asin = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
asin
acos :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
acos = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
acos
atan :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
atan = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
atan
sinh :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
sinh = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
sinh
cosh :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
cosh = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
cosh
asinh :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
asinh = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
asinh
acosh :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
acosh = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
acosh
atanh :: WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
atanh = (CN MPBall -> CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall k t1 t2 (p :: k).
(t1 -> t2) -> WithCurrentPrec p t1 -> WithCurrentPrec p t2
lift1 CN MPBall -> CN MPBall
forall a. Floating a => a -> a
atanh
_example1P :: CN MPBall
_example1P :: CN MPBall
_example1P = Precision
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall
forall t.
Precision
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p t) -> t
runWithPrec (Integer -> Precision
prec Integer
1000) forall a. Floating a => a
forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall)
pi
_example2P :: CN MPBall
_example2P :: CN MPBall
_example2P = Precision
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall
forall t.
Precision
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p t) -> t
runWithPrec (Integer -> Precision
prec Integer
1000) ((forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall)
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall
forall a b. (a -> b) -> a -> b
$ WithCurrentPrec p (CN MPBall)
forall a. Floating a => a
pi WithCurrentPrec p (CN MPBall)
-> WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall a. Num a => a -> a -> a
- WithCurrentPrec p (CN MPBall)
forall a. Floating a => a
pi
_example3P :: CN MPBall
_example3P :: CN MPBall
_example3P = Precision
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall
forall t.
Precision
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p t) -> t
runWithPrec (Integer -> Precision
prec Integer
1000) ((forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall)
-> (forall (p :: Nat). KnownNat p => WithCurrentPrec p (CN MPBall))
-> CN MPBall
forall a b. (a -> b) -> a -> b
$ WithCurrentPrec p (CN MPBall) -> WithCurrentPrec p (CN MPBall)
forall a. Floating a => a -> a
sqrt WithCurrentPrec p (CN MPBall)
2