Copyright | (c) Justin Le 2018 |
---|---|
License | BSD-3 |
Maintainer | justin@jle.im |
Stability | unstable |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Numeric.OneLiner
Description
Derived methods for numeric typeclasses, using Generics.OneLiner and GHC.Generics.
Can be used for any types (deriving Generic
) made with a single
constructor, where every field is an instance of Num
(or Fractional
or Floating
, depending on the function).
Also includes a newtype wrapper that imbues any such data type with an
instant Num
(and Fractional
and Floating
) instance, which can one
day be used with DerivingVia syntax to derive instances automatically.
- newtype GNum a = GNum {
- getGNum :: a
- gPlus :: forall a. (ADTRecord a, Constraints a Num) => a -> a -> a
- gMinus :: forall a. (ADTRecord a, Constraints a Num) => a -> a -> a
- gTimes :: forall a. (ADTRecord a, Constraints a Num) => a -> a -> a
- gNegate :: forall a. (ADTRecord a, Constraints a Num) => a -> a
- gAbs :: forall a. (ADTRecord a, Constraints a Num) => a -> a
- gSignum :: forall a. (ADTRecord a, Constraints a Num) => a -> a
- gFromInteger :: forall a. (ADTRecord a, Constraints a Num) => Integer -> a
- gDivide :: forall a. (ADTRecord a, Constraints a Fractional) => a -> a -> a
- gRecip :: forall a. (ADTRecord a, Constraints a Fractional) => a -> a
- gFromRational :: forall a. (ADTRecord a, Constraints a Fractional) => Rational -> a
- gPi :: forall a. (ADTRecord a, Constraints a Floating) => a
- gExp :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gLog :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gSqrt :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gPower :: forall a. (ADTRecord a, Constraints a Floating) => a -> a -> a
- gLogBase :: forall a. (ADTRecord a, Constraints a Floating) => a -> a -> a
- gSin :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gCos :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gTan :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gAsin :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gAcos :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gAtan :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gSinh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gCosh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gTanh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gAsinh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gAcosh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
- gAtanh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a
Newtype wrapper
If a
is a data type with a single constructor whose fields are all
instances of Num
, then
has a GNum
aNum
instance.
If a
is a data type with a single constructor whose fields are all
instances of Fractional
, then
has a GNum
aFractional
instance.
If a
is a data type with a single constructor whose fields are all
instances of Floating
, then
has a GNum
aFloating
instance.
Will one day be able to be used with DerivingVia syntax, to derive instances automatically.
Instances
Functor GNum # | |
Foldable GNum # | |
Traversable GNum # | |
Eq a => Eq (GNum a) # | |
(ADTRecord a, Constraints a Num, Constraints a Fractional, Constraints a Floating) => Floating (GNum a) # | |
(ADTRecord a, Constraints a Num, Constraints a Fractional) => Fractional (GNum a) # | |
Data a => Data (GNum a) # | |
(ADTRecord a, Constraints a Num) => Num (GNum a) # | |
Ord a => Ord (GNum a) # | |
Read a => Read (GNum a) # | |
Show a => Show (GNum a) # | |
Generic (GNum a) # | |
type Rep (GNum a) # | |
Generics-derived methods
All of these implement the appropriate functions by carrying them over every field of the data type
gPlus :: forall a. (ADTRecord a, Constraints a Num) => a -> a -> a #
gMinus :: forall a. (ADTRecord a, Constraints a Num) => a -> a -> a #
gTimes :: forall a. (ADTRecord a, Constraints a Num) => a -> a -> a #
gNegate :: forall a. (ADTRecord a, Constraints a Num) => a -> a #
gAbs :: forall a. (ADTRecord a, Constraints a Num) => a -> a #
gSignum :: forall a. (ADTRecord a, Constraints a Num) => a -> a #
gFromInteger :: forall a. (ADTRecord a, Constraints a Num) => Integer -> a #
Fractional
gDivide :: forall a. (ADTRecord a, Constraints a Fractional) => a -> a -> a #
gRecip :: forall a. (ADTRecord a, Constraints a Fractional) => a -> a #
gFromRational :: forall a. (ADTRecord a, Constraints a Fractional) => Rational -> a #
Floating
gPi :: forall a. (ADTRecord a, Constraints a Floating) => a #
gExp :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gLog :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gSqrt :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gPower :: forall a. (ADTRecord a, Constraints a Floating) => a -> a -> a #
gLogBase :: forall a. (ADTRecord a, Constraints a Floating) => a -> a -> a #
gSin :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gCos :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gTan :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gAsin :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gAcos :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gAtan :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gSinh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gCosh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gTanh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gAsinh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gAcosh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #
gAtanh :: forall a. (ADTRecord a, Constraints a Floating) => a -> a #