Safe Haskell | None |
---|---|
Language | Haskell2010 |
Multiplicative classes
Synopsis
- class Multiplicative a where
- product :: (Multiplicative a, Foldable f) => f a -> a
- class Multiplicative a => Divisive a where
Documentation
class Multiplicative a where Source #
For practical reasons, we begin the class tree with Additive
and Multiplicative
. Starting with Associative
and Unital
, or using Semigroup
and Monoid
from base tends to confuse the interface once you start having to disinguish between (say) monoidal addition and monoidal multiplication.
\a -> one * a == a
\a -> a * one == a
\a b c -> (a * b) * c == a * (b * c)
By convention, (*) is regarded as not necessarily commutative, but this is not universal, and the introduction of another symbol which means commutative multiplication seems a bit dogmatic.
>>>
one * 2
2
>>>
2 * 3
6
Instances
Multiplicative Bool Source # | |
Multiplicative Double Source # | |
Multiplicative Float Source # | |
Multiplicative Int Source # | |
Multiplicative Int8 Source # | |
Multiplicative Int16 Source # | |
Multiplicative Int32 Source # | |
Multiplicative Int64 Source # | |
Multiplicative Integer Source # | |
Multiplicative Natural Source # | |
Multiplicative Word Source # | |
Multiplicative Word8 Source # | |
Multiplicative Word16 Source # | |
Multiplicative Word32 Source # | |
Multiplicative Word64 Source # | |
(Subtractive a, Multiplicative a) => Multiplicative (Complex a) Source # | |
(Ord a, Signed a, Integral a, Ring a, Multiplicative a) => Multiplicative (Ratio a) Source # | |
(LowerBoundedField a, Eq a) => Multiplicative (LogField a) Source # | |
Multiplicative a => Multiplicative (Wrapped a) Source # | |
Multiplicative a => Multiplicative (Positive a) Source # | |
Multiplicative b => Multiplicative (a -> b) Source # | |
class Multiplicative a => Divisive a where Source #
or Division
Though unusual, the term Divisive usefully fits in with the grammer of other classes and avoids name clashes that occur with some popular libraries.
\(a :: Double) -> a / a ~= one || a == zero
\(a :: Double) -> recip a ~= one / a || a == zero
\(a :: Double) -> recip a * a ~= one || a == zero
\(a :: Double) -> a * recip a ~= one || a == zero
>>>
recip 2.0
0.5
>>>
1 / 2
0.5
Instances
Divisive Double Source # | |
Divisive Float Source # | |
(Subtractive a, Divisive a) => Divisive (Complex a) Source # | |
(Ord a, Signed a, Integral a, Ring a) => Divisive (Ratio a) Source # | |
(LowerBoundedField a, Eq a) => Divisive (LogField a) Source # | |
Divisive a => Divisive (Wrapped a) Source # | |
Divisive a => Divisive (Positive a) Source # | |
Divisive b => Divisive (a -> b) Source # | |