{-# LANGUAGE TemplateHaskell, TypeFamilies, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE RankNTypes #-}
module Data.VectorSpace.WrappedNum
  (WrappedNum(..)) where

import Data.VectorSpace
import qualified Data.Vector.Unboxed         as U
-- Template Haskell in GHC 7.4 requires these imports to bring
-- the `Vector` and `MVector` classes into scope
import qualified Data.Vector.Generic
import qualified Data.Vector.Generic.Mutable

import Data.Vector.Unboxed.Deriving

newtype WrappedNum a = WrapNum { WrappedNum a -> a
unwrapNum :: a }
    deriving
        (WrappedNum a -> WrappedNum a -> Bool
(WrappedNum a -> WrappedNum a -> Bool)
-> (WrappedNum a -> WrappedNum a -> Bool) -> Eq (WrappedNum a)
forall a. Eq a => WrappedNum a -> WrappedNum a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WrappedNum a -> WrappedNum a -> Bool
$c/= :: forall a. Eq a => WrappedNum a -> WrappedNum a -> Bool
== :: WrappedNum a -> WrappedNum a -> Bool
$c== :: forall a. Eq a => WrappedNum a -> WrappedNum a -> Bool
Eq, Eq (WrappedNum a)
Eq (WrappedNum a) =>
(WrappedNum a -> WrappedNum a -> Ordering)
-> (WrappedNum a -> WrappedNum a -> Bool)
-> (WrappedNum a -> WrappedNum a -> Bool)
-> (WrappedNum a -> WrappedNum a -> Bool)
-> (WrappedNum a -> WrappedNum a -> Bool)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> Ord (WrappedNum a)
WrappedNum a -> WrappedNum a -> Bool
WrappedNum a -> WrappedNum a -> Ordering
WrappedNum a -> WrappedNum a -> WrappedNum 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 (WrappedNum a)
forall a. Ord a => WrappedNum a -> WrappedNum a -> Bool
forall a. Ord a => WrappedNum a -> WrappedNum a -> Ordering
forall a. Ord a => WrappedNum a -> WrappedNum a -> WrappedNum a
min :: WrappedNum a -> WrappedNum a -> WrappedNum a
$cmin :: forall a. Ord a => WrappedNum a -> WrappedNum a -> WrappedNum a
max :: WrappedNum a -> WrappedNum a -> WrappedNum a
$cmax :: forall a. Ord a => WrappedNum a -> WrappedNum a -> WrappedNum a
>= :: WrappedNum a -> WrappedNum a -> Bool
$c>= :: forall a. Ord a => WrappedNum a -> WrappedNum a -> Bool
> :: WrappedNum a -> WrappedNum a -> Bool
$c> :: forall a. Ord a => WrappedNum a -> WrappedNum a -> Bool
<= :: WrappedNum a -> WrappedNum a -> Bool
$c<= :: forall a. Ord a => WrappedNum a -> WrappedNum a -> Bool
< :: WrappedNum a -> WrappedNum a -> Bool
$c< :: forall a. Ord a => WrappedNum a -> WrappedNum a -> Bool
compare :: WrappedNum a -> WrappedNum a -> Ordering
$ccompare :: forall a. Ord a => WrappedNum a -> WrappedNum a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (WrappedNum a)
Ord, ReadPrec [WrappedNum a]
ReadPrec (WrappedNum a)
Int -> ReadS (WrappedNum a)
ReadS [WrappedNum a]
(Int -> ReadS (WrappedNum a))
-> ReadS [WrappedNum a]
-> ReadPrec (WrappedNum a)
-> ReadPrec [WrappedNum a]
-> Read (WrappedNum a)
forall a. Read a => ReadPrec [WrappedNum a]
forall a. Read a => ReadPrec (WrappedNum a)
forall a. Read a => Int -> ReadS (WrappedNum a)
forall a. Read a => ReadS [WrappedNum a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [WrappedNum a]
$creadListPrec :: forall a. Read a => ReadPrec [WrappedNum a]
readPrec :: ReadPrec (WrappedNum a)
$creadPrec :: forall a. Read a => ReadPrec (WrappedNum a)
readList :: ReadS [WrappedNum a]
$creadList :: forall a. Read a => ReadS [WrappedNum a]
readsPrec :: Int -> ReadS (WrappedNum a)
$creadsPrec :: forall a. Read a => Int -> ReadS (WrappedNum a)
Read, Int -> WrappedNum a -> ShowS
[WrappedNum a] -> ShowS
WrappedNum a -> String
(Int -> WrappedNum a -> ShowS)
-> (WrappedNum a -> String)
-> ([WrappedNum a] -> ShowS)
-> Show (WrappedNum a)
forall a. Show a => Int -> WrappedNum a -> ShowS
forall a. Show a => [WrappedNum a] -> ShowS
forall a. Show a => WrappedNum a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WrappedNum a] -> ShowS
$cshowList :: forall a. Show a => [WrappedNum a] -> ShowS
show :: WrappedNum a -> String
$cshow :: forall a. Show a => WrappedNum a -> String
showsPrec :: Int -> WrappedNum a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> WrappedNum a -> ShowS
Show, WrappedNum a
WrappedNum a -> WrappedNum a -> Bounded (WrappedNum a)
forall a. a -> a -> Bounded a
forall a. Bounded a => WrappedNum a
maxBound :: WrappedNum a
$cmaxBound :: forall a. Bounded a => WrappedNum a
minBound :: WrappedNum a
$cminBound :: forall a. Bounded a => WrappedNum a
Bounded
        , Int -> WrappedNum a
WrappedNum a -> Int
WrappedNum a -> [WrappedNum a]
WrappedNum a -> WrappedNum a
WrappedNum a -> WrappedNum a -> [WrappedNum a]
WrappedNum a -> WrappedNum a -> WrappedNum a -> [WrappedNum a]
(WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (Int -> WrappedNum a)
-> (WrappedNum a -> Int)
-> (WrappedNum a -> [WrappedNum a])
-> (WrappedNum a -> WrappedNum a -> [WrappedNum a])
-> (WrappedNum a -> WrappedNum a -> [WrappedNum a])
-> (WrappedNum a -> WrappedNum a -> WrappedNum a -> [WrappedNum a])
-> Enum (WrappedNum a)
forall a. Enum a => Int -> WrappedNum a
forall a. Enum a => WrappedNum a -> Int
forall a. Enum a => WrappedNum a -> [WrappedNum a]
forall a. Enum a => WrappedNum a -> WrappedNum a
forall a. Enum a => WrappedNum a -> WrappedNum a -> [WrappedNum a]
forall a.
Enum a =>
WrappedNum a -> WrappedNum a -> WrappedNum a -> [WrappedNum a]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: WrappedNum a -> WrappedNum a -> WrappedNum a -> [WrappedNum a]
$cenumFromThenTo :: forall a.
Enum a =>
WrappedNum a -> WrappedNum a -> WrappedNum a -> [WrappedNum a]
enumFromTo :: WrappedNum a -> WrappedNum a -> [WrappedNum a]
$cenumFromTo :: forall a. Enum a => WrappedNum a -> WrappedNum a -> [WrappedNum a]
enumFromThen :: WrappedNum a -> WrappedNum a -> [WrappedNum a]
$cenumFromThen :: forall a. Enum a => WrappedNum a -> WrappedNum a -> [WrappedNum a]
enumFrom :: WrappedNum a -> [WrappedNum a]
$cenumFrom :: forall a. Enum a => WrappedNum a -> [WrappedNum a]
fromEnum :: WrappedNum a -> Int
$cfromEnum :: forall a. Enum a => WrappedNum a -> Int
toEnum :: Int -> WrappedNum a
$ctoEnum :: forall a. Enum a => Int -> WrappedNum a
pred :: WrappedNum a -> WrappedNum a
$cpred :: forall a. Enum a => WrappedNum a -> WrappedNum a
succ :: WrappedNum a -> WrappedNum a
$csucc :: forall a. Enum a => WrappedNum a -> WrappedNum a
Enum, Integer -> WrappedNum a
WrappedNum a -> WrappedNum a
WrappedNum a -> WrappedNum a -> WrappedNum a
(WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (Integer -> WrappedNum a)
-> Num (WrappedNum a)
forall a. Num a => Integer -> WrappedNum a
forall a. Num a => WrappedNum a -> WrappedNum a
forall a. Num a => WrappedNum a -> WrappedNum a -> WrappedNum a
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> WrappedNum a
$cfromInteger :: forall a. Num a => Integer -> WrappedNum a
signum :: WrappedNum a -> WrappedNum a
$csignum :: forall a. Num a => WrappedNum a -> WrappedNum a
abs :: WrappedNum a -> WrappedNum a
$cabs :: forall a. Num a => WrappedNum a -> WrappedNum a
negate :: WrappedNum a -> WrappedNum a
$cnegate :: forall a. Num a => WrappedNum a -> WrappedNum a
* :: WrappedNum a -> WrappedNum a -> WrappedNum a
$c* :: forall a. Num a => WrappedNum a -> WrappedNum a -> WrappedNum a
- :: WrappedNum a -> WrappedNum a -> WrappedNum a
$c- :: forall a. Num a => WrappedNum a -> WrappedNum a -> WrappedNum a
+ :: WrappedNum a -> WrappedNum a -> WrappedNum a
$c+ :: forall a. Num a => WrappedNum a -> WrappedNum a -> WrappedNum a
Num, Num (WrappedNum a)
Num (WrappedNum a) =>
(WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (Rational -> WrappedNum a)
-> Fractional (WrappedNum a)
Rational -> WrappedNum a
WrappedNum a -> WrappedNum a
WrappedNum a -> WrappedNum a -> WrappedNum a
forall a. Fractional a => Num (WrappedNum a)
forall a. Fractional a => Rational -> WrappedNum a
forall a. Fractional a => WrappedNum a -> WrappedNum a
forall a.
Fractional a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
forall a.
Num a =>
(a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> WrappedNum a
$cfromRational :: forall a. Fractional a => Rational -> WrappedNum a
recip :: WrappedNum a -> WrappedNum a
$crecip :: forall a. Fractional a => WrappedNum a -> WrappedNum a
/ :: WrappedNum a -> WrappedNum a -> WrappedNum a
$c/ :: forall a.
Fractional a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
$cp1Fractional :: forall a. Fractional a => Num (WrappedNum a)
Fractional, Num (WrappedNum a)
Ord (WrappedNum a)
(Num (WrappedNum a), Ord (WrappedNum a)) =>
(WrappedNum a -> Rational) -> Real (WrappedNum a)
WrappedNum a -> Rational
forall a. (Num a, Ord a) => (a -> Rational) -> Real a
forall a. Real a => Num (WrappedNum a)
forall a. Real a => Ord (WrappedNum a)
forall a. Real a => WrappedNum a -> Rational
toRational :: WrappedNum a -> Rational
$ctoRational :: forall a. Real a => WrappedNum a -> Rational
$cp2Real :: forall a. Real a => Ord (WrappedNum a)
$cp1Real :: forall a. Real a => Num (WrappedNum a)
Real, Fractional (WrappedNum a)
Real (WrappedNum a)
(Real (WrappedNum a), Fractional (WrappedNum a)) =>
(forall b. Integral b => WrappedNum a -> (b, WrappedNum a))
-> (forall b. Integral b => WrappedNum a -> b)
-> (forall b. Integral b => WrappedNum a -> b)
-> (forall b. Integral b => WrappedNum a -> b)
-> (forall b. Integral b => WrappedNum a -> b)
-> RealFrac (WrappedNum a)
WrappedNum a -> b
WrappedNum a -> b
WrappedNum a -> b
WrappedNum a -> b
WrappedNum a -> (b, WrappedNum a)
forall b. Integral b => WrappedNum a -> b
forall b. Integral b => WrappedNum a -> (b, WrappedNum a)
forall a.
(Real a, Fractional a) =>
(forall b. Integral b => a -> (b, a))
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> RealFrac a
forall a. RealFrac a => Fractional (WrappedNum a)
forall a. RealFrac a => Real (WrappedNum a)
forall a b. (RealFrac a, Integral b) => WrappedNum a -> b
forall a b.
(RealFrac a, Integral b) =>
WrappedNum a -> (b, WrappedNum a)
floor :: WrappedNum a -> b
$cfloor :: forall a b. (RealFrac a, Integral b) => WrappedNum a -> b
ceiling :: WrappedNum a -> b
$cceiling :: forall a b. (RealFrac a, Integral b) => WrappedNum a -> b
round :: WrappedNum a -> b
$cround :: forall a b. (RealFrac a, Integral b) => WrappedNum a -> b
truncate :: WrappedNum a -> b
$ctruncate :: forall a b. (RealFrac a, Integral b) => WrappedNum a -> b
properFraction :: WrappedNum a -> (b, WrappedNum a)
$cproperFraction :: forall a b.
(RealFrac a, Integral b) =>
WrappedNum a -> (b, WrappedNum a)
$cp2RealFrac :: forall a. RealFrac a => Fractional (WrappedNum a)
$cp1RealFrac :: forall a. RealFrac a => Real (WrappedNum a)
RealFrac
        , Fractional (WrappedNum a)
WrappedNum a
Fractional (WrappedNum a) =>
WrappedNum a
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> WrappedNum a)
-> Floating (WrappedNum a)
WrappedNum a -> WrappedNum a
WrappedNum a -> WrappedNum a -> WrappedNum a
forall a. Floating a => Fractional (WrappedNum a)
forall a. Floating a => WrappedNum a
forall a. Floating a => WrappedNum a -> WrappedNum a
forall a.
Floating a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
forall a.
Fractional 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 -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: WrappedNum a -> WrappedNum a
$clog1mexp :: forall a. Floating a => WrappedNum a -> WrappedNum a
log1pexp :: WrappedNum a -> WrappedNum a
$clog1pexp :: forall a. Floating a => WrappedNum a -> WrappedNum a
expm1 :: WrappedNum a -> WrappedNum a
$cexpm1 :: forall a. Floating a => WrappedNum a -> WrappedNum a
log1p :: WrappedNum a -> WrappedNum a
$clog1p :: forall a. Floating a => WrappedNum a -> WrappedNum a
atanh :: WrappedNum a -> WrappedNum a
$catanh :: forall a. Floating a => WrappedNum a -> WrappedNum a
acosh :: WrappedNum a -> WrappedNum a
$cacosh :: forall a. Floating a => WrappedNum a -> WrappedNum a
asinh :: WrappedNum a -> WrappedNum a
$casinh :: forall a. Floating a => WrappedNum a -> WrappedNum a
tanh :: WrappedNum a -> WrappedNum a
$ctanh :: forall a. Floating a => WrappedNum a -> WrappedNum a
cosh :: WrappedNum a -> WrappedNum a
$ccosh :: forall a. Floating a => WrappedNum a -> WrappedNum a
sinh :: WrappedNum a -> WrappedNum a
$csinh :: forall a. Floating a => WrappedNum a -> WrappedNum a
atan :: WrappedNum a -> WrappedNum a
$catan :: forall a. Floating a => WrappedNum a -> WrappedNum a
acos :: WrappedNum a -> WrappedNum a
$cacos :: forall a. Floating a => WrappedNum a -> WrappedNum a
asin :: WrappedNum a -> WrappedNum a
$casin :: forall a. Floating a => WrappedNum a -> WrappedNum a
tan :: WrappedNum a -> WrappedNum a
$ctan :: forall a. Floating a => WrappedNum a -> WrappedNum a
cos :: WrappedNum a -> WrappedNum a
$ccos :: forall a. Floating a => WrappedNum a -> WrappedNum a
sin :: WrappedNum a -> WrappedNum a
$csin :: forall a. Floating a => WrappedNum a -> WrappedNum a
logBase :: WrappedNum a -> WrappedNum a -> WrappedNum a
$clogBase :: forall a.
Floating a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
** :: WrappedNum a -> WrappedNum a -> WrappedNum a
$c** :: forall a.
Floating a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
sqrt :: WrappedNum a -> WrappedNum a
$csqrt :: forall a. Floating a => WrappedNum a -> WrappedNum a
log :: WrappedNum a -> WrappedNum a
$clog :: forall a. Floating a => WrappedNum a -> WrappedNum a
exp :: WrappedNum a -> WrappedNum a
$cexp :: forall a. Floating a => WrappedNum a -> WrappedNum a
pi :: WrappedNum a
$cpi :: forall a. Floating a => WrappedNum a
$cp1Floating :: forall a. Floating a => Fractional (WrappedNum a)
Floating, Floating (WrappedNum a)
RealFrac (WrappedNum a)
(RealFrac (WrappedNum a), Floating (WrappedNum a)) =>
(WrappedNum a -> Integer)
-> (WrappedNum a -> Int)
-> (WrappedNum a -> (Int, Int))
-> (WrappedNum a -> (Integer, Int))
-> (Integer -> Int -> WrappedNum a)
-> (WrappedNum a -> Int)
-> (WrappedNum a -> WrappedNum a)
-> (Int -> WrappedNum a -> WrappedNum a)
-> (WrappedNum a -> Bool)
-> (WrappedNum a -> Bool)
-> (WrappedNum a -> Bool)
-> (WrappedNum a -> Bool)
-> (WrappedNum a -> Bool)
-> (WrappedNum a -> WrappedNum a -> WrappedNum a)
-> RealFloat (WrappedNum a)
Int -> WrappedNum a -> WrappedNum a
Integer -> Int -> WrappedNum a
WrappedNum a -> Bool
WrappedNum a -> Int
WrappedNum a -> Integer
WrappedNum a -> (Int, Int)
WrappedNum a -> (Integer, Int)
WrappedNum a -> WrappedNum a
WrappedNum a -> WrappedNum a -> WrappedNum a
forall a. RealFloat a => Floating (WrappedNum a)
forall a. RealFloat a => RealFrac (WrappedNum a)
forall a. RealFloat a => Int -> WrappedNum a -> WrappedNum a
forall a. RealFloat a => Integer -> Int -> WrappedNum a
forall a. RealFloat a => WrappedNum a -> Bool
forall a. RealFloat a => WrappedNum a -> Int
forall a. RealFloat a => WrappedNum a -> Integer
forall a. RealFloat a => WrappedNum a -> (Int, Int)
forall a. RealFloat a => WrappedNum a -> (Integer, Int)
forall a. RealFloat a => WrappedNum a -> WrappedNum a
forall a.
RealFloat a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
forall a.
(RealFrac a, Floating a) =>
(a -> Integer)
-> (a -> Int)
-> (a -> (Int, Int))
-> (a -> (Integer, Int))
-> (Integer -> Int -> a)
-> (a -> Int)
-> (a -> a)
-> (Int -> a -> a)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> a -> a)
-> RealFloat a
atan2 :: WrappedNum a -> WrappedNum a -> WrappedNum a
$catan2 :: forall a.
RealFloat a =>
WrappedNum a -> WrappedNum a -> WrappedNum a
isIEEE :: WrappedNum a -> Bool
$cisIEEE :: forall a. RealFloat a => WrappedNum a -> Bool
isNegativeZero :: WrappedNum a -> Bool
$cisNegativeZero :: forall a. RealFloat a => WrappedNum a -> Bool
isDenormalized :: WrappedNum a -> Bool
$cisDenormalized :: forall a. RealFloat a => WrappedNum a -> Bool
isInfinite :: WrappedNum a -> Bool
$cisInfinite :: forall a. RealFloat a => WrappedNum a -> Bool
isNaN :: WrappedNum a -> Bool
$cisNaN :: forall a. RealFloat a => WrappedNum a -> Bool
scaleFloat :: Int -> WrappedNum a -> WrappedNum a
$cscaleFloat :: forall a. RealFloat a => Int -> WrappedNum a -> WrappedNum a
significand :: WrappedNum a -> WrappedNum a
$csignificand :: forall a. RealFloat a => WrappedNum a -> WrappedNum a
exponent :: WrappedNum a -> Int
$cexponent :: forall a. RealFloat a => WrappedNum a -> Int
encodeFloat :: Integer -> Int -> WrappedNum a
$cencodeFloat :: forall a. RealFloat a => Integer -> Int -> WrappedNum a
decodeFloat :: WrappedNum a -> (Integer, Int)
$cdecodeFloat :: forall a. RealFloat a => WrappedNum a -> (Integer, Int)
floatRange :: WrappedNum a -> (Int, Int)
$cfloatRange :: forall a. RealFloat a => WrappedNum a -> (Int, Int)
floatDigits :: WrappedNum a -> Int
$cfloatDigits :: forall a. RealFloat a => WrappedNum a -> Int
floatRadix :: WrappedNum a -> Integer
$cfloatRadix :: forall a. RealFloat a => WrappedNum a -> Integer
$cp2RealFloat :: forall a. RealFloat a => Floating (WrappedNum a)
$cp1RealFloat :: forall a. RealFloat a => RealFrac (WrappedNum a)
RealFloat)

derivingUnbox "Wrapped"
    [t| forall a. (U.Unbox a) => WrappedNum a -> a |] [| unwrapNum |] [| \ a -> WrapNum a |]

instance Num a => AdditiveGroup (WrappedNum a) where
    zeroV :: WrappedNum a
zeroV = 0
    ^+^ :: WrappedNum a -> WrappedNum a -> WrappedNum a
(^+^) = WrappedNum a -> WrappedNum a -> WrappedNum a
forall a. Num a => a -> a -> a
(+)
    negateV :: WrappedNum a -> WrappedNum a
negateV = WrappedNum a -> WrappedNum a
forall a. Num a => a -> a
negate

instance Num a => VectorSpace (WrappedNum a) where
    type Scalar (WrappedNum a) = WrappedNum a
    *^ :: Scalar (WrappedNum a) -> WrappedNum a -> WrappedNum a
(*^) = Scalar (WrappedNum a) -> WrappedNum a -> WrappedNum a
forall a. Num a => a -> a -> a
(*)