| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
NumHask.Algebra.Metric
Description
Metric classes
Synopsis
- class Distributive (Mag a) => Basis a where
- type Absolute a = (Basis a, Mag a ~ a)
- type Sign a = (Basis a, Base a ~ a)
- type EndoBased a = (Basis a, Mag a ~ a, Base a ~ a)
- abs :: Absolute a => a -> a
- signum :: Sign a => a -> a
- distance :: (Basis a, Subtractive a) => a -> a -> Mag a
- class (Distributive coord, Distributive (Dir coord)) => Direction coord where
- data Polar a = Polar {}
- polar :: (Dir (Base a) ~ Mag a, Basis a, Direction (Base a)) => a -> Polar (Mag a)
- coord :: (Scalar m ~ Dir m, MultiplicativeAction m, Direction m) => Polar (Scalar m) -> m
- class (Eq a, Additive a) => Epsilon a where
- epsilon :: a
- nearZero :: (Epsilon a, Lattice a, Subtractive a) => a -> Bool
- aboutEqual :: (Epsilon a, Lattice a, Subtractive a) => a -> a -> Bool
- (~=) :: (Epsilon a, Lattice a, Subtractive a) => a -> a -> Bool
- newtype EuclideanPair a = EuclideanPair {
- euclidPair :: (a, a)
Documentation
class Distributive (Mag a) => Basis a where Source #
Basis encapsulates the notion of magnitude (intuitively the quotienting of a higher-kinded number to a scalar one) and the basis on which the magnitude quotienting was performed. An instance needs to satisfy these laws:
\a -> magnitude a >= zero \a -> magnitude zero == zero \a -> a == magnitude a *| basis a \a -> magnitude (basis a) == one
The names chosen are meant to represent the spiritual idea of a basis rather than a specific mathematics. See https://en.wikipedia.org/wiki/Basis_(linear_algebra) & https://en.wikipedia.org/wiki/Norm_(mathematics) for some mathematical motivations.
>>>magnitude (-0.5 :: Double)0.5
>>>basis (-0.5 :: Double)-1.0
Since: 0.11
Instances
type Absolute a = (Basis a, Mag a ~ a) Source #
Basis where the domain and magnitude codomain are the same.
Since: 0.11
type Sign a = (Basis a, Base a ~ a) Source #
Basis where the domain and basis codomain are the same.
Since: 0.11
type EndoBased a = (Basis a, Mag a ~ a, Base a ~ a) Source #
Basis where the domain, magnitude codomain and basis codomain are the same.
Since: 0.11
abs :: Absolute a => a -> a Source #
The absolute value of a number.
\a -> abs a * signum a ~= a
>>>abs (-1)1
signum :: Sign a => a -> a Source #
The sign of a number.
>>>signum (-1)-1
abs zero == zero, so any value for signum zero is ok. We choose lawful neutral:
>>>signum zero == zeroTrue
Since: 0.11
distance :: (Basis a, Subtractive a) => a -> a -> Mag a Source #
Distance, which combines the Subtractive notion of difference, with Basis.
distance a b >= zero distance a a == zero distance a b *| basis (a - b) == a - b
class (Distributive coord, Distributive (Dir coord)) => Direction coord where Source #
Convert between a "co-ordinated" or "higher-kinded" number and a direction.
ray . angle == basis magnitude (ray x) == one
Since: 0.7
Instances
| TrigField a => Direction (EuclideanPair a) Source # | |||||
Defined in NumHask.Algebra.Metric Associated Types
Methods angle :: EuclideanPair a -> Dir (EuclideanPair a) Source # ray :: Dir (EuclideanPair a) -> EuclideanPair a Source # | |||||
| TrigField a => Direction (Complex a) Source # | |||||
| Direction a => Direction (Positive a) Source # | |||||
| Direction a => Direction (Wrapped a) Source # | |||||
Something that has a magnitude and a direction, with both expressed as the same type.
Since: 0.7
Instances
| Data a => Data (Polar a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Polar a -> c (Polar a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Polar a) # toConstr :: Polar a -> Constr # dataTypeOf :: Polar a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Polar a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Polar a)) # gmapT :: (forall b. Data b => b -> b) -> Polar a -> Polar a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Polar a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Polar a -> r # gmapQ :: (forall d. Data d => d -> u) -> Polar a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Polar a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Polar a -> m (Polar a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Polar a -> m (Polar a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Polar a -> m (Polar a) # | |||||||||
| Generic (Polar a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
| |||||||||
| Show a => Show (Polar a) Source # | |||||||||
| Eq a => Eq (Polar a) Source # | |||||||||
| (Additive a, Multiplicative a) => Basis (Polar a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
| |||||||||
| type Rep (Polar a) Source # | |||||||||
Defined in NumHask.Algebra.Metric type Rep (Polar a) = D1 ('MetaData "Polar" "NumHask.Algebra.Metric" "numhask-0.13.1.0-4JL3km17UUX2ZsRg2smvA0" 'False) (C1 ('MetaCons "Polar" 'PrefixI 'True) (S1 ('MetaSel ('Just "radial") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "azimuth") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) | |||||||||
| type Base (Polar a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||
| type Mag (Polar a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||
polar :: (Dir (Base a) ~ Mag a, Basis a, Direction (Base a)) => a -> Polar (Mag a) Source #
Convert a higher-kinded number that has direction, to a Polar
Since: 0.7
coord :: (Scalar m ~ Dir m, MultiplicativeAction m, Direction m) => Polar (Scalar m) -> m Source #
Convert a Polar to a (higher-kinded) number that has a direction.
Since: 0.7
class (Eq a, Additive a) => Epsilon a where Source #
A small number, especially useful for approximate equality.
Minimal complete definition
Nothing
Instances
| Epsilon Int16 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Int32 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Int64 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Int8 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Word16 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Word32 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Word64 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Word8 Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Integer Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon Double Source # | 1e-14 |
Defined in NumHask.Algebra.Metric | |
| Epsilon Float Source # | 1e-6 |
Defined in NumHask.Algebra.Metric | |
| Epsilon Int Source # | 0 |
Defined in NumHask.Algebra.Metric | |
| Epsilon Word Source # | |
Defined in NumHask.Algebra.Metric | |
| Epsilon a => Epsilon (EuclideanPair a) Source # | |
Defined in NumHask.Algebra.Metric Methods epsilon :: EuclideanPair a Source # | |
| Epsilon a => Epsilon (Complex a) Source # | |
Defined in NumHask.Data.Complex | |
| Epsilon a => Epsilon (Positive a) Source # | |
Defined in NumHask.Data.Positive | |
| (Ord a, EndoBased a, Integral a, Ring a, MeetSemiLattice a) => Epsilon (Ratio a) Source # | |
Defined in NumHask.Data.Rational | |
| Epsilon a => Epsilon (Wrapped a) Source # | |
Defined in NumHask.Data.Wrapped | |
nearZero :: (Epsilon a, Lattice a, Subtractive a) => a -> Bool Source #
Note that the constraint is Lattice rather than Ord allowing broader usage.
>>>nearZero (epsilon :: Double)True
>>>nearZero (epsilon :: EuclideanPair Double)True
aboutEqual :: (Epsilon a, Lattice a, Subtractive a) => a -> a -> Bool Source #
Approximate equality
>>>aboutEqual zero (epsilon :: Double)True
(~=) :: (Epsilon a, Lattice a, Subtractive a) => a -> a -> Bool infixl 4 Source #
About equal operator.
>>>(1.0 + epsilon) ~= (1.0 :: Double)True
newtype EuclideanPair a Source #
Two dimensional cartesian coordinates.
Since: 0.11
Constructors
| EuclideanPair | |
Fields
| |
Instances
| Applicative EuclideanPair Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods pure :: a -> EuclideanPair a # (<*>) :: EuclideanPair (a -> b) -> EuclideanPair a -> EuclideanPair b # liftA2 :: (a -> b -> c) -> EuclideanPair a -> EuclideanPair b -> EuclideanPair c # (*>) :: EuclideanPair a -> EuclideanPair b -> EuclideanPair b # (<*) :: EuclideanPair a -> EuclideanPair b -> EuclideanPair a # | |||||||||
| Functor EuclideanPair Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods fmap :: (a -> b) -> EuclideanPair a -> EuclideanPair b # (<$) :: a -> EuclideanPair b -> EuclideanPair a # | |||||||||
| Data a => Data (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> EuclideanPair a -> c (EuclideanPair a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (EuclideanPair a) # toConstr :: EuclideanPair a -> Constr # dataTypeOf :: EuclideanPair a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (EuclideanPair a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (EuclideanPair a)) # gmapT :: (forall b. Data b => b -> b) -> EuclideanPair a -> EuclideanPair a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EuclideanPair a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EuclideanPair a -> r # gmapQ :: (forall d. Data d => d -> u) -> EuclideanPair a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> EuclideanPair a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> EuclideanPair a -> m (EuclideanPair a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> EuclideanPair a -> m (EuclideanPair a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> EuclideanPair a -> m (EuclideanPair a) # | |||||||||
| Generic (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
Methods from :: EuclideanPair a -> Rep (EuclideanPair a) x # to :: Rep (EuclideanPair a) x -> EuclideanPair a # | |||||||||
| Show a => Show (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods showsPrec :: Int -> EuclideanPair a -> ShowS # show :: EuclideanPair a -> String # showList :: [EuclideanPair a] -> ShowS # | |||||||||
| Eq a => Eq (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods (==) :: EuclideanPair a -> EuclideanPair a -> Bool # (/=) :: EuclideanPair a -> EuclideanPair a -> Bool # | |||||||||
| Divisive a => DivisiveAction (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods (|/) :: EuclideanPair a -> Scalar (EuclideanPair a) -> EuclideanPair a Source # | |||||||||
| Multiplicative a => MultiplicativeAction (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
Methods (|*) :: EuclideanPair a -> Scalar (EuclideanPair a) -> EuclideanPair a Source # | |||||||||
| Additive a => Additive (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods (+) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # zero :: EuclideanPair a Source # | |||||||||
| Subtractive a => Subtractive (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods negate :: EuclideanPair a -> EuclideanPair a Source # (-) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # | |||||||||
| (Ord a, TrigField a, ExpField a) => ExpField (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods exp :: EuclideanPair a -> EuclideanPair a Source # log :: EuclideanPair a -> EuclideanPair a Source # (**) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # logBase :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # sqrt :: EuclideanPair a -> EuclideanPair a Source # | |||||||||
| (QuotientField a, Subtractive a) => QuotientField (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
Methods properFraction :: EuclideanPair a -> (Whole (EuclideanPair a), EuclideanPair a) Source # round :: EuclideanPair a -> Whole (EuclideanPair a) Source # ceiling :: EuclideanPair a -> Whole (EuclideanPair a) Source # floor :: EuclideanPair a -> Whole (EuclideanPair a) Source # truncate :: EuclideanPair a -> Whole (EuclideanPair a) Source # | |||||||||
| JoinSemiLattice a => JoinSemiLattice (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods (\/) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # | |||||||||
| LowerBounded a => LowerBounded (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods bottom :: EuclideanPair a Source # | |||||||||
| MeetSemiLattice a => MeetSemiLattice (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods (/\) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # | |||||||||
| UpperBounded a => UpperBounded (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods top :: EuclideanPair a Source # | |||||||||
| (ExpField a, Eq a) => Basis (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
Methods magnitude :: EuclideanPair a -> Mag (EuclideanPair a) Source # basis :: EuclideanPair a -> Base (EuclideanPair a) Source # | |||||||||
| TrigField a => Direction (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Associated Types
Methods angle :: EuclideanPair a -> Dir (EuclideanPair a) Source # ray :: Dir (EuclideanPair a) -> EuclideanPair a Source # | |||||||||
| Epsilon a => Epsilon (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods epsilon :: EuclideanPair a Source # | |||||||||
| (Subtractive a, Divisive a) => Divisive (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods recip :: EuclideanPair a -> EuclideanPair a Source # (/) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # | |||||||||
| Multiplicative a => Multiplicative (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric Methods (*) :: EuclideanPair a -> EuclideanPair a -> EuclideanPair a Source # one :: EuclideanPair a Source # | |||||||||
| type Rep (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric type Rep (EuclideanPair a) = D1 ('MetaData "EuclideanPair" "NumHask.Algebra.Metric" "numhask-0.13.1.0-4JL3km17UUX2ZsRg2smvA0" 'True) (C1 ('MetaCons "EuclideanPair" 'PrefixI 'True) (S1 ('MetaSel ('Just "euclidPair") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a, a)))) | |||||||||
| type Scalar (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||
| type Whole (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||
| type Base (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||
| type Dir (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||
| type Mag (EuclideanPair a) Source # | |||||||||
Defined in NumHask.Algebra.Metric | |||||||||