{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RoleAnnotations #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wall #-}

-- | Wrapped numhask instances, useful for derivingvia situations to quickly specifiy a numhask friendly numerical type.
module NumHask.Data.Wrapped
  ( Wrapped (..),
  )
where

import NumHask.Algebra.Additive
import NumHask.Algebra.Field
import NumHask.Algebra.Group
import NumHask.Algebra.Lattice
import NumHask.Algebra.Multiplicative
import NumHask.Algebra.Ring
import NumHask.Analysis.Metric
import NumHask.Data.Integral
import NumHask.Data.Rational
import qualified Prelude as P

-- | Wrapped numeric instances
newtype Wrapped a = Wrapped {Wrapped a -> a
unWrapped :: a}
  deriving
    ( Int -> Wrapped a -> ShowS
[Wrapped a] -> ShowS
Wrapped a -> String
(Int -> Wrapped a -> ShowS)
-> (Wrapped a -> String)
-> ([Wrapped a] -> ShowS)
-> Show (Wrapped a)
forall a. Show a => Int -> Wrapped a -> ShowS
forall a. Show a => [Wrapped a] -> ShowS
forall a. Show a => Wrapped a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Wrapped a] -> ShowS
$cshowList :: forall a. Show a => [Wrapped a] -> ShowS
show :: Wrapped a -> String
$cshow :: forall a. Show a => Wrapped a -> String
showsPrec :: Int -> Wrapped a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Wrapped a -> ShowS
P.Show,
      Wrapped a -> Wrapped a -> Bool
(Wrapped a -> Wrapped a -> Bool)
-> (Wrapped a -> Wrapped a -> Bool) -> Eq (Wrapped a)
forall a. Eq a => Wrapped a -> Wrapped a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Wrapped a -> Wrapped a -> Bool
$c/= :: forall a. Eq a => Wrapped a -> Wrapped a -> Bool
== :: Wrapped a -> Wrapped a -> Bool
$c== :: forall a. Eq a => Wrapped a -> Wrapped a -> Bool
P.Eq,
      Eq (Wrapped a)
Eq (Wrapped a)
-> (Wrapped a -> Wrapped a -> Ordering)
-> (Wrapped a -> Wrapped a -> Bool)
-> (Wrapped a -> Wrapped a -> Bool)
-> (Wrapped a -> Wrapped a -> Bool)
-> (Wrapped a -> Wrapped a -> Bool)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> Ord (Wrapped a)
Wrapped a -> Wrapped a -> Bool
Wrapped a -> Wrapped a -> Ordering
Wrapped a -> Wrapped a -> Wrapped a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (Wrapped a)
forall a. Ord a => Wrapped a -> Wrapped a -> Bool
forall a. Ord a => Wrapped a -> Wrapped a -> Ordering
forall a. Ord a => Wrapped a -> Wrapped a -> Wrapped a
min :: Wrapped a -> Wrapped a -> Wrapped a
$cmin :: forall a. Ord a => Wrapped a -> Wrapped a -> Wrapped a
max :: Wrapped a -> Wrapped a -> Wrapped a
$cmax :: forall a. Ord a => Wrapped a -> Wrapped a -> Wrapped a
>= :: Wrapped a -> Wrapped a -> Bool
$c>= :: forall a. Ord a => Wrapped a -> Wrapped a -> Bool
> :: Wrapped a -> Wrapped a -> Bool
$c> :: forall a. Ord a => Wrapped a -> Wrapped a -> Bool
<= :: Wrapped a -> Wrapped a -> Bool
$c<= :: forall a. Ord a => Wrapped a -> Wrapped a -> Bool
< :: Wrapped a -> Wrapped a -> Bool
$c< :: forall a. Ord a => Wrapped a -> Wrapped a -> Bool
compare :: Wrapped a -> Wrapped a -> Ordering
$ccompare :: forall a. Ord a => Wrapped a -> Wrapped a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (Wrapped a)
P.Ord,
      Wrapped a -> Wrapped a -> Wrapped a
(Wrapped a -> Wrapped a -> Wrapped a) -> Magma (Wrapped a)
forall a. Magma a => Wrapped a -> Wrapped a -> Wrapped a
forall a. (a -> a -> a) -> Magma a
⊕ :: Wrapped a -> Wrapped a -> Wrapped a
$c⊕ :: forall a. Magma a => Wrapped a -> Wrapped a -> Wrapped a
Magma,
      Magma (Wrapped a)
Magma (Wrapped a) -> Idempotent (Wrapped a)
forall a. Magma a -> Idempotent a
forall a. Magma a => Magma (Wrapped a)
Idempotent,
      Wrapped a
Wrapped a -> Wrapped a -> Wrapped a
(Wrapped a -> Wrapped a -> Wrapped a)
-> Wrapped a -> Additive (Wrapped a)
forall a. Additive a => Wrapped a
forall a. Additive a => Wrapped a -> Wrapped a -> Wrapped a
forall a. (a -> a -> a) -> a -> Additive a
zero :: Wrapped a
$czero :: forall a. Additive a => Wrapped a
+ :: Wrapped a -> Wrapped a -> Wrapped a
$c+ :: forall a. Additive a => Wrapped a -> Wrapped a -> Wrapped a
Additive,
      Additive (Wrapped a)
Additive (Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> Subtractive (Wrapped a)
Wrapped a -> Wrapped a
Wrapped a -> Wrapped a -> Wrapped a
forall a. Subtractive a => Additive (Wrapped a)
forall a. Subtractive a => Wrapped a -> Wrapped a
forall a. Subtractive a => Wrapped a -> Wrapped a -> Wrapped a
forall a. Additive a -> (a -> a) -> (a -> a -> a) -> Subtractive a
- :: Wrapped a -> Wrapped a -> Wrapped a
$c- :: forall a. Subtractive a => Wrapped a -> Wrapped a -> Wrapped a
negate :: Wrapped a -> Wrapped a
$cnegate :: forall a. Subtractive a => Wrapped a -> Wrapped a
$cp1Subtractive :: forall a. Subtractive a => Additive (Wrapped a)
Subtractive,
      Wrapped a
Wrapped a -> Wrapped a -> Wrapped a
(Wrapped a -> Wrapped a -> Wrapped a)
-> Wrapped a -> Multiplicative (Wrapped a)
forall a. Multiplicative a => Wrapped a
forall a. Multiplicative a => Wrapped a -> Wrapped a -> Wrapped a
forall a. (a -> a -> a) -> a -> Multiplicative a
one :: Wrapped a
$cone :: forall a. Multiplicative a => Wrapped a
* :: Wrapped a -> Wrapped a -> Wrapped a
$c* :: forall a. Multiplicative a => Wrapped a -> Wrapped a -> Wrapped a
Multiplicative,
      Multiplicative (Wrapped a)
Multiplicative (Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> Divisive (Wrapped a)
Wrapped a -> Wrapped a
Wrapped a -> Wrapped a -> Wrapped a
forall a. Divisive a => Multiplicative (Wrapped a)
forall a. Divisive a => Wrapped a -> Wrapped a
forall a. Divisive a => Wrapped a -> Wrapped a -> Wrapped a
forall a.
Multiplicative a -> (a -> a) -> (a -> a -> a) -> Divisive a
/ :: Wrapped a -> Wrapped a -> Wrapped a
$c/ :: forall a. Divisive a => Wrapped a -> Wrapped a -> Wrapped a
recip :: Wrapped a -> Wrapped a
$crecip :: forall a. Divisive a => Wrapped a -> Wrapped a
$cp1Divisive :: forall a. Divisive a => Multiplicative (Wrapped a)
Divisive,
      Additive (Wrapped a)
Multiplicative (Wrapped a)
Additive (Wrapped a)
-> Multiplicative (Wrapped a) -> Distributive (Wrapped a)
forall a. (Additive a, Multiplicative a) => Additive (Wrapped a)
forall a.
(Additive a, Multiplicative a) =>
Multiplicative (Wrapped a)
forall a. Additive a -> Multiplicative a -> Distributive a
$cp2Distributive :: forall a.
(Additive a, Multiplicative a) =>
Multiplicative (Wrapped a)
$cp1Distributive :: forall a. (Additive a, Multiplicative a) => Additive (Wrapped a)
Distributive,
      Subtractive (Wrapped a)
Distributive (Wrapped a)
Distributive (Wrapped a)
-> Subtractive (Wrapped a) -> Ring (Wrapped a)
forall a.
(Multiplicative a, Subtractive a) =>
Subtractive (Wrapped a)
forall a.
(Multiplicative a, Subtractive a) =>
Distributive (Wrapped a)
forall a. Distributive a -> Subtractive a -> Ring a
$cp2Ring :: forall a.
(Multiplicative a, Subtractive a) =>
Subtractive (Wrapped a)
$cp1Ring :: forall a.
(Multiplicative a, Subtractive a) =>
Distributive (Wrapped a)
Ring,
      Distributive (Wrapped a)
Distributive (Wrapped a)
-> (Wrapped a -> Wrapped a) -> InvolutiveRing (Wrapped a)
Wrapped a -> Wrapped a
forall a. InvolutiveRing a => Distributive (Wrapped a)
forall a. InvolutiveRing a => Wrapped a -> Wrapped a
forall a. Distributive a -> (a -> a) -> InvolutiveRing a
adj :: Wrapped a -> Wrapped a
$cadj :: forall a. InvolutiveRing a => Wrapped a -> Wrapped a
$cp1InvolutiveRing :: forall a. InvolutiveRing a => Distributive (Wrapped a)
InvolutiveRing,
      Distributive (Wrapped a)
Distributive (Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> StarSemiring (Wrapped a)
Wrapped a -> Wrapped a
forall a. StarSemiring a => Distributive (Wrapped a)
forall a. StarSemiring a => Wrapped a -> Wrapped a
forall a. Distributive a -> (a -> a) -> (a -> a) -> StarSemiring a
plus :: Wrapped a -> Wrapped a
$cplus :: forall a. StarSemiring a => Wrapped a -> Wrapped a
star :: Wrapped a -> Wrapped a
$cstar :: forall a. StarSemiring a => Wrapped a -> Wrapped a
$cp1StarSemiring :: forall a. StarSemiring a => Distributive (Wrapped a)
StarSemiring,
      Idempotent (Wrapped a)
StarSemiring (Wrapped a)
StarSemiring (Wrapped a)
-> Idempotent (Wrapped a) -> KleeneAlgebra (Wrapped a)
forall a. StarSemiring a -> Idempotent a -> KleeneAlgebra a
forall a. (StarSemiring a, Magma a) => Idempotent (Wrapped a)
forall a. (StarSemiring a, Magma a) => StarSemiring (Wrapped a)
$cp2KleeneAlgebra :: forall a. (StarSemiring a, Magma a) => Idempotent (Wrapped a)
$cp1KleeneAlgebra :: forall a. (StarSemiring a, Magma a) => StarSemiring (Wrapped a)
KleeneAlgebra,
      Subtractive (Wrapped a)
Divisive (Wrapped a)
Distributive (Wrapped a)
Distributive (Wrapped a)
-> Subtractive (Wrapped a)
-> Divisive (Wrapped a)
-> Field (Wrapped a)
forall a. (Subtractive a, Divisive a) => Subtractive (Wrapped a)
forall a. (Subtractive a, Divisive a) => Divisive (Wrapped a)
forall a. (Subtractive a, Divisive a) => Distributive (Wrapped a)
forall a. Distributive a -> Subtractive a -> Divisive a -> Field a
$cp3Field :: forall a. (Subtractive a, Divisive a) => Divisive (Wrapped a)
$cp2Field :: forall a. (Subtractive a, Divisive a) => Subtractive (Wrapped a)
$cp1Field :: forall a. (Subtractive a, Divisive a) => Distributive (Wrapped a)
Field,
      Field (Wrapped a)
Field (Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> ExpField (Wrapped a)
Wrapped a -> Wrapped a
Wrapped a -> Wrapped a -> Wrapped a
forall a. ExpField a => Field (Wrapped a)
forall a. ExpField a => Wrapped a -> Wrapped a
forall a. ExpField a => Wrapped a -> Wrapped a -> Wrapped a
forall a.
Field a
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> ExpField a
sqrt :: Wrapped a -> Wrapped a
$csqrt :: forall a. ExpField a => Wrapped a -> Wrapped a
** :: Wrapped a -> Wrapped a -> Wrapped a
$c** :: forall a. ExpField a => Wrapped a -> Wrapped a -> Wrapped a
logBase :: Wrapped a -> Wrapped a -> Wrapped a
$clogBase :: forall a. ExpField a => Wrapped a -> Wrapped a -> Wrapped a
log :: Wrapped a -> Wrapped a
$clog :: forall a. ExpField a => Wrapped a -> Wrapped a
exp :: Wrapped a -> Wrapped a
$cexp :: forall a. ExpField a => Wrapped a -> Wrapped a
$cp1ExpField :: forall a. ExpField a => Field (Wrapped a)
ExpField,
      Field (Wrapped a)
Wrapped a
Field (Wrapped a)
-> Wrapped a
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> TrigField (Wrapped a)
Wrapped a -> Wrapped a
Wrapped a -> Wrapped a -> Wrapped a
forall a. TrigField a => Field (Wrapped a)
forall a. TrigField a => Wrapped a
forall a. TrigField a => Wrapped a -> Wrapped a
forall a. TrigField a => Wrapped a -> Wrapped a -> Wrapped a
forall a.
Field a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> TrigField a
atanh :: Wrapped a -> Wrapped a
$catanh :: forall a. TrigField a => Wrapped a -> Wrapped a
acosh :: Wrapped a -> Wrapped a
$cacosh :: forall a. TrigField a => Wrapped a -> Wrapped a
asinh :: Wrapped a -> Wrapped a
$casinh :: forall a. TrigField a => Wrapped a -> Wrapped a
tanh :: Wrapped a -> Wrapped a
$ctanh :: forall a. TrigField a => Wrapped a -> Wrapped a
cosh :: Wrapped a -> Wrapped a
$ccosh :: forall a. TrigField a => Wrapped a -> Wrapped a
sinh :: Wrapped a -> Wrapped a
$csinh :: forall a. TrigField a => Wrapped a -> Wrapped a
atan2 :: Wrapped a -> Wrapped a -> Wrapped a
$catan2 :: forall a. TrigField a => Wrapped a -> Wrapped a -> Wrapped a
atan :: Wrapped a -> Wrapped a
$catan :: forall a. TrigField a => Wrapped a -> Wrapped a
acos :: Wrapped a -> Wrapped a
$cacos :: forall a. TrigField a => Wrapped a -> Wrapped a
asin :: Wrapped a -> Wrapped a
$casin :: forall a. TrigField a => Wrapped a -> Wrapped a
tan :: Wrapped a -> Wrapped a
$ctan :: forall a. TrigField a => Wrapped a -> Wrapped a
cos :: Wrapped a -> Wrapped a
$ccos :: forall a. TrigField a => Wrapped a -> Wrapped a
sin :: Wrapped a -> Wrapped a
$csin :: forall a. TrigField a => Wrapped a -> Wrapped a
pi :: Wrapped a
$cpi :: forall a. TrigField a => Wrapped a
$cp1TrigField :: forall a. TrigField a => Field (Wrapped a)
TrigField,
      Distributive (Wrapped a)
Distributive (Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a))
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a))
-> Integral (Wrapped a)
Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a)
Wrapped a -> Wrapped a -> Wrapped a
forall a.
Distributive a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> (a, a))
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> (a, a))
-> Integral a
forall a. Integral a => Distributive (Wrapped a)
forall a.
Integral a =>
Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a)
forall a. Integral a => Wrapped a -> Wrapped a -> Wrapped a
quotRem :: Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a)
$cquotRem :: forall a.
Integral a =>
Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a)
rem :: Wrapped a -> Wrapped a -> Wrapped a
$crem :: forall a. Integral a => Wrapped a -> Wrapped a -> Wrapped a
quot :: Wrapped a -> Wrapped a -> Wrapped a
$cquot :: forall a. Integral a => Wrapped a -> Wrapped a -> Wrapped a
divMod :: Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a)
$cdivMod :: forall a.
Integral a =>
Wrapped a -> Wrapped a -> (Wrapped a, Wrapped a)
mod :: Wrapped a -> Wrapped a -> Wrapped a
$cmod :: forall a. Integral a => Wrapped a -> Wrapped a -> Wrapped a
div :: Wrapped a -> Wrapped a -> Wrapped a
$cdiv :: forall a. Integral a => Wrapped a -> Wrapped a -> Wrapped a
$cp1Integral :: forall a. Integral a => Distributive (Wrapped a)
Integral,
      Additive (Wrapped a)
Multiplicative (Wrapped a)
Additive (Wrapped a)
-> Multiplicative (Wrapped a)
-> (Wrapped a -> Wrapped a)
-> (Wrapped a -> Wrapped a)
-> Signed (Wrapped a)
Wrapped a -> Wrapped a
forall a.
Additive a -> Multiplicative a -> (a -> a) -> (a -> a) -> Signed a
forall a. Signed a => Additive (Wrapped a)
forall a. Signed a => Multiplicative (Wrapped a)
forall a. Signed a => Wrapped a -> Wrapped a
abs :: Wrapped a -> Wrapped a
$cabs :: forall a. Signed a => Wrapped a -> Wrapped a
sign :: Wrapped a -> Wrapped a
$csign :: forall a. Signed a => Wrapped a -> Wrapped a
$cp2Signed :: forall a. Signed a => Multiplicative (Wrapped a)
$cp1Signed :: forall a. Signed a => Additive (Wrapped a)
Signed,
      Eq (Wrapped a)
Eq (Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> MeetSemiLattice (Wrapped a)
Wrapped a -> Wrapped a -> Wrapped a
forall a. Eq a -> (a -> a -> a) -> MeetSemiLattice a
forall a. MeetSemiLattice a => Eq (Wrapped a)
forall a. MeetSemiLattice a => Wrapped a -> Wrapped a -> Wrapped a
/\ :: Wrapped a -> Wrapped a -> Wrapped a
$c/\ :: forall a. MeetSemiLattice a => Wrapped a -> Wrapped a -> Wrapped a
$cp1MeetSemiLattice :: forall a. MeetSemiLattice a => Eq (Wrapped a)
MeetSemiLattice,
      Eq (Wrapped a)
Eq (Wrapped a)
-> (Wrapped a -> Wrapped a -> Wrapped a)
-> JoinSemiLattice (Wrapped a)
Wrapped a -> Wrapped a -> Wrapped a
forall a. Eq a -> (a -> a -> a) -> JoinSemiLattice a
forall a. JoinSemiLattice a => Eq (Wrapped a)
forall a. JoinSemiLattice a => Wrapped a -> Wrapped a -> Wrapped a
\/ :: Wrapped a -> Wrapped a -> Wrapped a
$c\/ :: forall a. JoinSemiLattice a => Wrapped a -> Wrapped a -> Wrapped a
$cp1JoinSemiLattice :: forall a. JoinSemiLattice a => Eq (Wrapped a)
JoinSemiLattice,
      JoinSemiLattice (Wrapped a)
Wrapped a
JoinSemiLattice (Wrapped a)
-> Wrapped a -> BoundedJoinSemiLattice (Wrapped a)
forall a. BoundedJoinSemiLattice a => JoinSemiLattice (Wrapped a)
forall a. BoundedJoinSemiLattice a => Wrapped a
forall a. JoinSemiLattice a -> a -> BoundedJoinSemiLattice a
bottom :: Wrapped a
$cbottom :: forall a. BoundedJoinSemiLattice a => Wrapped a
$cp1BoundedJoinSemiLattice :: forall a. BoundedJoinSemiLattice a => JoinSemiLattice (Wrapped a)
BoundedJoinSemiLattice,
      MeetSemiLattice (Wrapped a)
Wrapped a
MeetSemiLattice (Wrapped a)
-> Wrapped a -> BoundedMeetSemiLattice (Wrapped a)
forall a. BoundedMeetSemiLattice a => MeetSemiLattice (Wrapped a)
forall a. BoundedMeetSemiLattice a => Wrapped a
forall a. MeetSemiLattice a -> a -> BoundedMeetSemiLattice a
top :: Wrapped a
$ctop :: forall a. BoundedMeetSemiLattice a => Wrapped a
$cp1BoundedMeetSemiLattice :: forall a. BoundedMeetSemiLattice a => MeetSemiLattice (Wrapped a)
BoundedMeetSemiLattice,
      Eq (Wrapped a)
Subtractive (Wrapped a)
Additive (Wrapped a)
MeetSemiLattice (Wrapped a)
Wrapped a
Eq (Wrapped a)
-> Additive (Wrapped a)
-> Subtractive (Wrapped a)
-> MeetSemiLattice (Wrapped a)
-> Wrapped a
-> (Wrapped a -> Bool)
-> (Wrapped a -> Wrapped a -> Bool)
-> Epsilon (Wrapped a)
Wrapped a -> Bool
Wrapped a -> Wrapped a -> Bool
forall a.
Eq a
-> Additive a
-> Subtractive a
-> MeetSemiLattice a
-> a
-> (a -> Bool)
-> (a -> a -> Bool)
-> Epsilon a
forall a. Epsilon a => Eq (Wrapped a)
forall a. Epsilon a => Subtractive (Wrapped a)
forall a. Epsilon a => Additive (Wrapped a)
forall a. Epsilon a => MeetSemiLattice (Wrapped a)
forall a. Epsilon a => Wrapped a
forall a. Epsilon a => Wrapped a -> Bool
forall a. Epsilon a => Wrapped a -> Wrapped a -> Bool
aboutEqual :: Wrapped a -> Wrapped a -> Bool
$caboutEqual :: forall a. Epsilon a => Wrapped a -> Wrapped a -> Bool
nearZero :: Wrapped a -> Bool
$cnearZero :: forall a. Epsilon a => Wrapped a -> Bool
epsilon :: Wrapped a
$cepsilon :: forall a. Epsilon a => Wrapped a
$cp4Epsilon :: forall a. Epsilon a => MeetSemiLattice (Wrapped a)
$cp3Epsilon :: forall a. Epsilon a => Subtractive (Wrapped a)
$cp2Epsilon :: forall a. Epsilon a => Additive (Wrapped a)
$cp1Epsilon :: forall a. Epsilon a => Eq (Wrapped a)
Epsilon,
      Field (Wrapped a)
Wrapped a
Field (Wrapped a)
-> Wrapped a -> Wrapped a -> UpperBoundedField (Wrapped a)
forall a. UpperBoundedField a => Field (Wrapped a)
forall a. UpperBoundedField a => Wrapped a
forall a. Field a -> a -> a -> UpperBoundedField a
nan :: Wrapped a
$cnan :: forall a. UpperBoundedField a => Wrapped a
infinity :: Wrapped a
$cinfinity :: forall a. UpperBoundedField a => Wrapped a
$cp1UpperBoundedField :: forall a. UpperBoundedField a => Field (Wrapped a)
UpperBoundedField,
      Subtractive (Wrapped a)
Field (Wrapped a)
Wrapped a
Subtractive (Wrapped a)
-> Field (Wrapped a) -> Wrapped a -> LowerBoundedField (Wrapped a)
forall a. Subtractive a -> Field a -> a -> LowerBoundedField a
forall a. LowerBoundedField a => Subtractive (Wrapped a)
forall a. LowerBoundedField a => Field (Wrapped a)
forall a. LowerBoundedField a => Wrapped a
negInfinity :: Wrapped a
$cnegInfinity :: forall a. LowerBoundedField a => Wrapped a
$cp2LowerBoundedField :: forall a. LowerBoundedField a => Field (Wrapped a)
$cp1LowerBoundedField :: forall a. LowerBoundedField a => Subtractive (Wrapped a)
LowerBoundedField
    )

instance
  (P.Ord a, QuotientField a P.Integer) =>
  QuotientField (Wrapped a) (Wrapped P.Integer)
  where
  properFraction :: Wrapped a -> (Wrapped Integer, Wrapped a)
properFraction (Wrapped a
a) = let (Integer
i, a
r) = a -> (Integer, a)
forall a b. QuotientField a b => a -> (b, a)
properFraction a
a in (Integer -> Wrapped Integer
forall a. a -> Wrapped a
Wrapped Integer
i, a -> Wrapped a
forall a. a -> Wrapped a
Wrapped a
r)

instance (FromIntegral a b) => FromIntegral (Wrapped a) b where
  fromIntegral :: b -> Wrapped a
fromIntegral b
a = a -> Wrapped a
forall a. a -> Wrapped a
Wrapped (b -> a
forall a b. FromIntegral a b => b -> a
fromIntegral b
a)

instance (ToIntegral a b) => ToIntegral (Wrapped a) b where
  toIntegral :: Wrapped a -> b
toIntegral (Wrapped a
a) = a -> b
forall a b. ToIntegral a b => a -> b
toIntegral a
a

instance (FromRatio a b) => FromRatio (Wrapped a) b where
  fromRatio :: Ratio b -> Wrapped a
fromRatio Ratio b
a = a -> Wrapped a
forall a. a -> Wrapped a
Wrapped (Ratio b -> a
forall a b. FromRatio a b => Ratio b -> a
fromRatio Ratio b
a)

instance (ToRatio a b) => ToRatio (Wrapped a) b where
  toRatio :: Wrapped a -> Ratio b
toRatio (Wrapped a
a) = a -> Ratio b
forall a b. ToRatio a b => a -> Ratio b
toRatio a
a