Copyright | (c) Justin Le 2018 |
---|---|
License | BSD-3 |
Maintainer | justin@jle.im |
Stability | unstable |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
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.
Functor GNum Source # | |
Foldable GNum Source # | |
Traversable GNum Source # | |
Eq a => Eq (GNum a) Source # | |
(ADTRecord a, Constraints a Num, Constraints a Fractional, Constraints a Floating) => Floating (GNum a) Source # | |
(ADTRecord a, Constraints a Num, Constraints a Fractional) => Fractional (GNum a) Source # | |
Data a => Data (GNum a) Source # | |
(ADTRecord a, Constraints a Num) => Num (GNum a) Source # | |
Ord a => Ord (GNum a) Source # | |
Read a => Read (GNum a) Source # | |
Show a => Show (GNum a) Source # | |
Generic (GNum a) Source # | |
type Rep (GNum a) Source # | |
Generics-derived methods
All of these implement the appropriate functions by carrying them over every field of the data type
gFromInteger :: forall a. (ADTRecord a, Constraints a Num) => Integer -> a Source #
Fractional
gDivide :: forall a. (ADTRecord a, Constraints a Fractional) => a -> a -> a Source #
gRecip :: forall a. (ADTRecord a, Constraints a Fractional) => a -> a Source #
gFromRational :: forall a. (ADTRecord a, Constraints a Fractional) => Rational -> a Source #