module Factory.Data.Exponential(
Exponential,
evaluate,
invert,
getBase,
getExponent,
rightIdentity,
(<^),
(=~)
) where
import qualified Control.Arrow
infix 4 =~
infixr 8 <^
type Exponential base exponent = (base, exponent)
{-# INLINE getBase #-}
getBase :: Exponential base exponent -> base
getBase :: Exponential base exponent -> base
getBase = Exponential base exponent -> base
forall a b. (a, b) -> a
fst
{-# INLINE getExponent #-}
getExponent :: Exponential base exponent -> exponent
getExponent :: Exponential base exponent -> exponent
getExponent = Exponential base exponent -> exponent
forall a b. (a, b) -> b
snd
rightIdentity :: Num exponent => base -> Exponential base exponent
rightIdentity :: base -> Exponential base exponent
rightIdentity base
x = (base
x, exponent
1)
{-# INLINE evaluate #-}
evaluate :: (Num base, Integral exponent) => Exponential base exponent -> base
evaluate :: Exponential base exponent -> base
evaluate = (base -> exponent -> base) -> Exponential base exponent -> base
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry base -> exponent -> base
forall a b. (Num a, Integral b) => a -> b -> a
(^)
(=~) :: Eq base => Exponential base exponent -> Exponential base exponent -> Bool
(base
l, exponent
_) =~ :: Exponential base exponent -> Exponential base exponent -> Bool
=~ (base
r, exponent
_) = base
l base -> base -> Bool
forall a. Eq a => a -> a -> Bool
== base
r
(<^) :: Num exponent
=> Exponential base exponent
-> exponent
-> Exponential base exponent
(base
b, exponent
e) <^ :: Exponential base exponent -> exponent -> Exponential base exponent
<^ exponent
power = (base
b, exponent
e exponent -> exponent -> exponent
forall a. Num a => a -> a -> a
* exponent
power)
invert :: Num exponent => Exponential base exponent -> Exponential base exponent
invert :: Exponential base exponent -> Exponential base exponent
invert = (exponent -> exponent)
-> Exponential base exponent -> Exponential base exponent
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
Control.Arrow.second exponent -> exponent
forall a. Num a => a -> a
negate