chart-svg-0.3.1: Charting library targetting SVGs.
Safe HaskellNone
LanguageHaskell2010

Chart.Data

Description

Data primitives and utilities

Whilst the library makes use of numhask, it does not re-export, to avoid clashes with Prelude, with the exception of zero, one, angle, norm & abs.

Rect and Point, from numhask-space, make up the base elements of many chart primitives, and all of numhask-space is re-exported.

Synopsis

Data Primitives

newtype Rect a #

a rectangular space often representing a finite 2-dimensional or XY plane.

>>> one :: Rect Double
Rect -0.5 0.5 -0.5 0.5
>>> zero :: Rect Double
Rect 0.0 0.0 0.0 0.0
>>> one + one :: Rect Double
Rect -1.0 1.0 -1.0 1.0
>>> let a = Rect (-1.0) 1.0 (-2.0) 4.0
>>> a
Rect -1.0 1.0 -2.0 4.0
>>> a * one
Rect -1.0 1.0 -2.0 4.0
>>> let (Ranges x y) = a
>>> x
Range -1.0 1.0
>>> y
Range -2.0 4.0
>>> fmap (+1) (Rect 1 2 3 4)
Rect 2 3 4 5

as a Space instance with Points as Elements

>>> project (Rect 0.0 1.0 (-1.0) 0.0) (Rect 1.0 4.0 10.0 0.0) (Point 0.5 1.0)
Point 2.5 -10.0
>>> gridSpace (Rect 0.0 10.0 0.0 1.0) (Point (2::Int) (2::Int))
[Rect 0.0 5.0 0.0 0.5,Rect 0.0 5.0 0.5 1.0,Rect 5.0 10.0 0.0 0.5,Rect 5.0 10.0 0.5 1.0]
>>> grid MidPos (Rect 0.0 10.0 0.0 1.0) (Point (2::Int) (2::Int))
[Point 2.5 0.25,Point 2.5 0.75,Point 7.5 0.25,Point 7.5 0.75]

Constructors

Rect' (Compose Point Range a) 

Instances

Instances details
Functor Rect 
Instance details

Defined in NumHask.Space.Rect

Methods

fmap :: (a -> b) -> Rect a -> Rect b #

(<$) :: a -> Rect b -> Rect a #

Applicative Rect 
Instance details

Defined in NumHask.Space.Rect

Methods

pure :: a -> Rect a #

(<*>) :: Rect (a -> b) -> Rect a -> Rect b #

liftA2 :: (a -> b -> c) -> Rect a -> Rect b -> Rect c #

(*>) :: Rect a -> Rect b -> Rect b #

(<*) :: Rect a -> Rect b -> Rect a #

Foldable Rect 
Instance details

Defined in NumHask.Space.Rect

Methods

fold :: Monoid m => Rect m -> m #

foldMap :: Monoid m => (a -> m) -> Rect a -> m #

foldMap' :: Monoid m => (a -> m) -> Rect a -> m #

foldr :: (a -> b -> b) -> b -> Rect a -> b #

foldr' :: (a -> b -> b) -> b -> Rect a -> b #

foldl :: (b -> a -> b) -> b -> Rect a -> b #

foldl' :: (b -> a -> b) -> b -> Rect a -> b #

foldr1 :: (a -> a -> a) -> Rect a -> a #

foldl1 :: (a -> a -> a) -> Rect a -> a #

toList :: Rect a -> [a] #

null :: Rect a -> Bool #

length :: Rect a -> Int #

elem :: Eq a => a -> Rect a -> Bool #

maximum :: Ord a => Rect a -> a #

minimum :: Ord a => Rect a -> a #

sum :: Num a => Rect a -> a #

product :: Num a => Rect a -> a #

Traversable Rect 
Instance details

Defined in NumHask.Space.Rect

Methods

traverse :: Applicative f => (a -> f b) -> Rect a -> f (Rect b) #

sequenceA :: Applicative f => Rect (f a) -> f (Rect a) #

mapM :: Monad m => (a -> m b) -> Rect a -> m (Rect b) #

sequence :: Monad m => Rect (m a) -> m (Rect a) #

Distributive Rect 
Instance details

Defined in NumHask.Space.Rect

Methods

distribute :: Functor f => f (Rect a) -> Rect (f a) #

collect :: Functor f => (a -> Rect b) -> f a -> Rect (f b) #

distributeM :: Monad m => m (Rect a) -> Rect (m a) #

collectM :: Monad m => (a -> Rect b) -> m a -> Rect (m b) #

Representable Rect 
Instance details

Defined in NumHask.Space.Rect

Associated Types

type Rep Rect #

Methods

tabulate :: (Rep Rect -> a) -> Rect a #

index :: Rect a -> Rep Rect -> a #

Eq a => Eq (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

(==) :: Rect a -> Rect a -> Bool #

(/=) :: Rect a -> Rect a -> Bool #

Show a => Show (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

showsPrec :: Int -> Rect a -> ShowS #

show :: Rect a -> String #

showList :: [Rect a] -> ShowS #

Generic (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Associated Types

type Rep (Rect a) :: Type -> Type #

Methods

from :: Rect a -> Rep (Rect a) x #

to :: Rep (Rect a) x -> Rect a #

Ord a => Semigroup (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

(<>) :: Rect a -> Rect a -> Rect a #

sconcat :: NonEmpty (Rect a) -> Rect a #

stimes :: Integral b => b -> Rect a -> Rect a #

(Ord a, Field a) => Signed (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

sign :: Rect a -> Rect a #

abs :: Rect a -> Rect a #

(Ord a, Field a) => Multiplicative (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

(*) :: Rect a -> Rect a -> Rect a #

one :: Rect a #

(Ord a, Field a) => Divisive (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

recip :: Rect a -> Rect a #

(/) :: Rect a -> Rect a -> Rect a #

Additive a => Additive (Rect a)

Numeric algebra based on interval arithmetioc for addition and unitRect and projection for multiplication >>> one + one :: Rect Double Rect -1.0 1.0 -1.0 1.0

Instance details

Defined in NumHask.Space.Rect

Methods

(+) :: Rect a -> Rect a -> Rect a #

zero :: Rect a #

Subtractive a => Subtractive (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

negate :: Rect a -> Rect a #

(-) :: Rect a -> Rect a -> Rect a #

Ord a => Space (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Associated Types

type Element (Rect a) #

Methods

lower :: Rect a -> Element (Rect a) #

upper :: Rect a -> Element (Rect a) #

singleton :: Element (Rect a) -> Rect a #

intersection :: Rect a -> Rect a -> Rect a #

union :: Rect a -> Rect a -> Rect a #

normalise :: Rect a -> Rect a #

(...) :: Element (Rect a) -> Element (Rect a) -> Rect a #

(>.<) :: Element (Rect a) -> Element (Rect a) -> Rect a #

(|.|) :: Element (Rect a) -> Rect a -> Bool #

(|>|) :: Rect a -> Rect a -> Bool #

(|<|) :: Rect a -> Rect a -> Bool #

(FromIntegral a Int, Field a, Ord a) => FieldSpace (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Associated Types

type Grid (Rect a) #

Methods

grid :: Pos -> Rect a -> Grid (Rect a) -> [Element (Rect a)] #

gridSpace :: Rect a -> Grid (Rect a) -> [Rect a] #

type Rep Rect 
Instance details

Defined in NumHask.Space.Rect

type Rep Rect = (Bool, Bool)
type Rep (Rect a) 
Instance details

Defined in NumHask.Space.Rect

type Rep (Rect a) = D1 ('MetaData "Rect" "NumHask.Space.Rect" "numhask-space-0.10.0.0-JgyBfnFqS4y76YSUL7WLZz" 'True) (C1 ('MetaCons "Rect'" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Compose Point Range a))))
type Element (Rect a) 
Instance details

Defined in NumHask.Space.Rect

type Element (Rect a) = Point a
type Grid (Rect a) 
Instance details

Defined in NumHask.Space.Rect

type Grid (Rect a) = Point Int

padRect :: Subtractive a => a -> Rect a -> Rect a Source #

Additive pad (or frame or buffer) a Rect.

>>> padRect 1 one
Rect -1.5 1.5 -1.5 1.5

padSingletons :: Rect Double -> Rect Double Source #

Pad a Rect to remove singleton dimensions.

Attempting to scale a singleton dimension of a Rect is a common bug.

Due to the use of scaling, and thus zero dividing, this is a common exception to guard against.

>>> project (Rect 0 0 0 1) one (Point 0 0)
Point NaN -0.5
>>> project (padSingletons (Rect 0 0 0 1)) one (Point 0 0)
Point 0.0 -0.5

singletonGuard :: Maybe (Rect Double) -> Rect Double Source #

Guard against an upstream Nothing or a singleton dimension

data Point a #

A 2-dimensional Point of a's

In contrast with a tuple, a Point is functorial over both arguments.

>>> let p = Point 1 1
>>> p + p
Point 2 2
>>> (2*) <$> p
Point 2 2

A major reason for this bespoke treatment (compared to just using linear, say) is that Points do not have maximums and minimums but they do form a lattice, and this is useful for folding sets of points to find out the (rectangular) Space they occupy.

>>> Point 0 1 /\ Point 1 0
Point 0 0
>>> Point 0 1 \/ Point 1 0
Point 1 1

This is used extensively in chart-svg to ergonomically obtain chart areas.

unsafeSpace1 [Point 1 0, Point 0 1] :: Rect Double

Rect 0.0 1.0 0.0 1.0

Constructors

Point 

Fields

Instances

Instances details
Monad Point 
Instance details

Defined in NumHask.Space.Point

Methods

(>>=) :: Point a -> (a -> Point b) -> Point b #

(>>) :: Point a -> Point b -> Point b #

return :: a -> Point a #

Functor Point 
Instance details

Defined in NumHask.Space.Point

Methods

fmap :: (a -> b) -> Point a -> Point b #

(<$) :: a -> Point b -> Point a #

Applicative Point 
Instance details

Defined in NumHask.Space.Point

Methods

pure :: a -> Point a #

(<*>) :: Point (a -> b) -> Point a -> Point b #

liftA2 :: (a -> b -> c) -> Point a -> Point b -> Point c #

(*>) :: Point a -> Point b -> Point b #

(<*) :: Point a -> Point b -> Point a #

Foldable Point 
Instance details

Defined in NumHask.Space.Point

Methods

fold :: Monoid m => Point m -> m #

foldMap :: Monoid m => (a -> m) -> Point a -> m #

foldMap' :: Monoid m => (a -> m) -> Point a -> m #

foldr :: (a -> b -> b) -> b -> Point a -> b #

foldr' :: (a -> b -> b) -> b -> Point a -> b #

foldl :: (b -> a -> b) -> b -> Point a -> b #

foldl' :: (b -> a -> b) -> b -> Point a -> b #

foldr1 :: (a -> a -> a) -> Point a -> a #

foldl1 :: (a -> a -> a) -> Point a -> a #

toList :: Point a -> [a] #

null :: Point a -> Bool #

length :: Point a -> Int #

elem :: Eq a => a -> Point a -> Bool #

maximum :: Ord a => Point a -> a #

minimum :: Ord a => Point a -> a #

sum :: Num a => Point a -> a #

product :: Num a => Point a -> a #

Traversable Point 
Instance details

Defined in NumHask.Space.Point

Methods

traverse :: Applicative f => (a -> f b) -> Point a -> f (Point b) #

sequenceA :: Applicative f => Point (f a) -> f (Point a) #

mapM :: Monad m => (a -> m b) -> Point a -> m (Point b) #

sequence :: Monad m => Point (m a) -> m (Point a) #

Distributive Point 
Instance details

Defined in NumHask.Space.Point

Methods

distribute :: Functor f => f (Point a) -> Point (f a) #

collect :: Functor f => (a -> Point b) -> f a -> Point (f b) #

distributeM :: Monad m => m (Point a) -> Point (m a) #

collectM :: Monad m => (a -> Point b) -> m a -> Point (m b) #

Representable Point 
Instance details

Defined in NumHask.Space.Point

Associated Types

type Rep Point #

Methods

tabulate :: (Rep Point -> a) -> Point a #

index :: Point a -> Rep Point -> a #

Eq1 Point 
Instance details

Defined in NumHask.Space.Point

Methods

liftEq :: (a -> b -> Bool) -> Point a -> Point b -> Bool #

Show1 Point 
Instance details

Defined in NumHask.Space.Point

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Point a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Point a] -> ShowS #

Bounded a => Bounded (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

minBound :: Point a #

maxBound :: Point a #

Eq a => Eq (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(==) :: Point a -> Point a -> Bool #

(/=) :: Point a -> Point a -> Bool #

Show a => Show (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

showsPrec :: Int -> Point a -> ShowS #

show :: Point a -> String #

showList :: [Point a] -> ShowS #

Generic (Point a) 
Instance details

Defined in NumHask.Space.Point

Associated Types

type Rep (Point a) :: Type -> Type #

Methods

from :: Point a -> Rep (Point a) x #

to :: Rep (Point a) x -> Point a #

Semigroup a => Semigroup (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(<>) :: Point a -> Point a -> Point a #

sconcat :: NonEmpty (Point a) -> Point a #

stimes :: Integral b => b -> Point a -> Point a #

(Semigroup a, Monoid a) => Monoid (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

mempty :: Point a #

mappend :: Point a -> Point a -> Point a #

mconcat :: [Point a] -> Point a #

Ord a => JoinSemiLattice (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(\/) :: Point a -> Point a -> Point a #

Ord a => MeetSemiLattice (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(/\) :: Point a -> Point a -> Point a #

Field a => Field (Point a) 
Instance details

Defined in NumHask.Space.Point

Signed a => Signed (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

sign :: Point a -> Point a #

abs :: Point a -> Point a #

Distributive a => Distributive (Point a) 
Instance details

Defined in NumHask.Space.Point

Multiplicative a => Multiplicative (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(*) :: Point a -> Point a -> Point a #

one :: Point a #

Divisive a => Divisive (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

recip :: Point a -> Point a #

(/) :: Point a -> Point a -> Point a #

Additive a => Additive (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(+) :: Point a -> Point a -> Point a #

zero :: Point a #

Subtractive a => Subtractive (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

negate :: Point a -> Point a #

(-) :: Point a -> Point a -> Point a #

UniformRange a => UniformRange (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

uniformRM :: StatefulGen g m => (Point a, Point a) -> g -> m (Point a) #

(ExpField a, Eq a) => Norm (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

norm :: Point a -> a #

basis :: Point a -> Point a #

TrigField a => Direction (Point a) a

angle formed by a vector from the origin to a Point and the x-axis (Point 1 0). Note that an angle between two points p1 & p2 is thus angle p2 - angle p1

Instance details

Defined in NumHask.Space.Point

Methods

angle :: Point a -> a #

ray :: a -> Point a #

Additive a => AdditiveAction (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

(.+) :: a -> Point a -> Point a #

Subtractive a => SubtractiveAction (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

(.-) :: a -> Point a -> Point a #

Multiplicative a => MultiplicativeAction (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

(.*) :: a -> Point a -> Point a #

Divisive a => DivisiveAction (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

(./) :: a -> Point a -> Point a #

(Multiplicative a, Additive a) => Affinity (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

transform :: Transform a -> Point a -> Point a #

type Rep Point 
Instance details

Defined in NumHask.Space.Point

type Rep Point = Bool
type Rep (Point a) 
Instance details

Defined in NumHask.Space.Point

type Rep (Point a) = D1 ('MetaData "Point" "NumHask.Space.Point" "numhask-space-0.10.0.0-JgyBfnFqS4y76YSUL7WLZz" 'False) (C1 ('MetaCons "Point" 'PrefixI 'True) (S1 ('MetaSel ('Just "_x") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 a) :*: S1 ('MetaSel ('Just "_y") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 a)))

addp :: Point Double -> Point Double -> Point Double Source #

add Points, dimension-wise

>>> Point 1 1 `addp` Point 0 2
Point 1.0 3.0

NumHask Exports

Note that (+) and (*) from numhask are not actually re-exported.

class Multiplicative a where #

or Multiplication

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

Minimal complete definition

(*), one

Methods

one :: a #

Instances

Instances details
Multiplicative Bool 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Bool -> Bool -> Bool #

one :: Bool #

Multiplicative Double 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Double -> Double -> Double #

one :: Double #

Multiplicative Float 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Float -> Float -> Float #

one :: Float #

Multiplicative Int 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Int -> Int -> Int #

one :: Int #

Multiplicative Int8 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Int8 -> Int8 -> Int8 #

one :: Int8 #

Multiplicative Int16 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Int16 -> Int16 -> Int16 #

one :: Int16 #

Multiplicative Int32 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Int32 -> Int32 -> Int32 #

one :: Int32 #

Multiplicative Int64 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Int64 -> Int64 -> Int64 #

one :: Int64 #

Multiplicative Integer 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Integer -> Integer -> Integer #

one :: Integer #

Multiplicative Natural 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Natural -> Natural -> Natural #

one :: Natural #

Multiplicative Word 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Word -> Word -> Word #

one :: Word #

Multiplicative Word8 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Word8 -> Word8 -> Word8 #

one :: Word8 #

Multiplicative Word16 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Word16 -> Word16 -> Word16 #

one :: Word16 #

Multiplicative Word32 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Word32 -> Word32 -> Word32 #

one :: Word32 #

Multiplicative Word64 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: Word64 -> Word64 -> Word64 #

one :: Word64 #

(Ord a, Signed a, Integral a, Ring a, Multiplicative a) => Multiplicative (Ratio a) 
Instance details

Defined in NumHask.Data.Rational

Methods

(*) :: Ratio a -> Ratio a -> Ratio a #

one :: Ratio a #

(Subtractive a, Multiplicative a) => Multiplicative (Complex a) 
Instance details

Defined in NumHask.Data.Complex

Methods

(*) :: Complex a -> Complex a -> Complex a #

one :: Complex a #

(Ord a, Field a) => Multiplicative (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

(*) :: Rect a -> Rect a -> Rect a #

one :: Rect a #

Multiplicative a => Multiplicative (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(*) :: Point a -> Point a -> Point a #

one :: Point a #

(Field a, Eq a, Ord a) => Multiplicative (Range a) 
Instance details

Defined in NumHask.Space.Range

Methods

(*) :: Range a -> Range a -> Range a #

one :: Range a #

Multiplicative b => Multiplicative (a -> b) 
Instance details

Defined in NumHask.Algebra.Multiplicative

Methods

(*) :: (a -> b) -> (a -> b) -> a -> b #

one :: a -> b #

(Multiplicative a, Distributive a, Subtractive a, KnownNat m, HasShape '[m, m]) => Multiplicative (Matrix m m a) 
Instance details

Defined in NumHask.Array.Fixed

Methods

(*) :: Matrix m m a -> Matrix m m a -> Matrix m m a #

one :: Matrix m m a #

class Additive a where #

or Addition

For practical reasons, we begin the class tree with Additive. 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 -> zero + a == a
\a -> a + zero == a
\a b c -> (a + b) + c == a + (b + c)
\a b -> a + b == b + a

By convention, (+) is regarded as commutative, but this is not universal, and the introduction of another symbol which means non-commutative addition seems a bit dogmatic.

>>> zero + 1
1
>>> 1 + 1
2

Minimal complete definition

(+), zero

Methods

zero :: a #

Instances

Instances details
Additive Bool 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Bool -> Bool -> Bool #

zero :: Bool #

Additive Double 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Double -> Double -> Double #

zero :: Double #

Additive Float 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Float -> Float -> Float #

zero :: Float #

Additive Int 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Int -> Int -> Int #

zero :: Int #

Additive Int8 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Int8 -> Int8 -> Int8 #

zero :: Int8 #

Additive Int16 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Int16 -> Int16 -> Int16 #

zero :: Int16 #

Additive Int32 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Int32 -> Int32 -> Int32 #

zero :: Int32 #

Additive Int64 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Int64 -> Int64 -> Int64 #

zero :: Int64 #

Additive Integer 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Integer -> Integer -> Integer #

zero :: Integer #

Additive Natural 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Natural -> Natural -> Natural #

zero :: Natural #

Additive Word 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Word -> Word -> Word #

zero :: Word #

Additive Word8 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Word8 -> Word8 -> Word8 #

zero :: Word8 #

Additive Word16 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Word16 -> Word16 -> Word16 #

zero :: Word16 #

Additive Word32 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Word32 -> Word32 -> Word32 #

zero :: Word32 #

Additive Word64 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: Word64 -> Word64 -> Word64 #

zero :: Word64 #

(Ord a, Signed a, Integral a, Ring a) => Additive (Ratio a) 
Instance details

Defined in NumHask.Data.Rational

Methods

(+) :: Ratio a -> Ratio a -> Ratio a #

zero :: Ratio a #

Additive a => Additive (Complex a) 
Instance details

Defined in NumHask.Data.Complex

Methods

(+) :: Complex a -> Complex a -> Complex a #

zero :: Complex a #

Additive a => Additive (Rect a)

Numeric algebra based on interval arithmetioc for addition and unitRect and projection for multiplication >>> one + one :: Rect Double Rect -1.0 1.0 -1.0 1.0

Instance details

Defined in NumHask.Space.Rect

Methods

(+) :: Rect a -> Rect a -> Rect a #

zero :: Rect a #

Additive a => Additive (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

(+) :: Point a -> Point a -> Point a #

zero :: Point a #

(Additive a, Eq a, Ord a) => Additive (Range a) 
Instance details

Defined in NumHask.Space.Range

Methods

(+) :: Range a -> Range a -> Range a #

zero :: Range a #

Additive b => Additive (a -> b) 
Instance details

Defined in NumHask.Algebra.Additive

Methods

(+) :: (a -> b) -> (a -> b) -> a -> b #

zero :: a -> b #

(Additive a, HasShape s) => Additive (Array s a) 
Instance details

Defined in NumHask.Array.Fixed

Methods

(+) :: Array s a -> Array s a -> Array s a #

zero :: Array s a #

class (Additive coord, Multiplicative coord, Additive dir, Multiplicative dir) => Direction coord dir | coord -> dir where #

Convert between a "co-ordinated" or "higher-kinded" number and representations of an angle. Typically thought of as polar co-ordinate conversion.

See Polar coordinate system

ray . angle == basis
norm (ray x) == one

Methods

angle :: coord -> dir #

ray :: dir -> coord #

Instances

Instances details
TrigField a => Direction (Complex a) a 
Instance details

Defined in NumHask.Data.Complex

Methods

angle :: Complex a -> a #

ray :: a -> Complex a #

TrigField a => Direction (Point a) a

angle formed by a vector from the origin to a Point and the x-axis (Point 1 0). Note that an angle between two points p1 & p2 is thus angle p2 - angle p1

Instance details

Defined in NumHask.Space.Point

Methods

angle :: Point a -> a #

ray :: a -> Point a #

class (Additive a, Multiplicative b, Additive b) => Norm a b | a -> b where #

Norm is a slight generalisation of Signed. The class has the same shape but allows the codomain to be different to the domain.

\a -> norm a >= zero
\a -> norm zero == zero
\a -> a == norm a .* basis a
\a -> norm (basis a) == one
>>> norm (-0.5 :: Double) :: Double
0.5
>>> basis (-0.5 :: Double) :: Double
-1.0

Methods

norm :: a -> b #

or length, or ||v||

basis :: a -> a #

or direction, or v-hat

Instances

Instances details
Norm Double Double 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Double -> Double #

basis :: Double -> Double #

Norm Float Float 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Float -> Float #

basis :: Float -> Float #

Norm Int Int 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Int -> Int #

basis :: Int -> Int #

Norm Int8 Int8 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Int8 -> Int8 #

basis :: Int8 -> Int8 #

Norm Int16 Int16 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Int16 -> Int16 #

basis :: Int16 -> Int16 #

Norm Int32 Int32 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Int32 -> Int32 #

basis :: Int32 -> Int32 #

Norm Int64 Int64 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Int64 -> Int64 #

basis :: Int64 -> Int64 #

Norm Integer Integer 
Instance details

Defined in NumHask.Algebra.Metric

Norm Natural Natural 
Instance details

Defined in NumHask.Algebra.Metric

Norm Word Word 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Word -> Word #

basis :: Word -> Word #

Norm Word8 Word8 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Word8 -> Word8 #

basis :: Word8 -> Word8 #

Norm Word16 Word16 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Word16 -> Word16 #

basis :: Word16 -> Word16 #

Norm Word32 Word32 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Word32 -> Word32 #

basis :: Word32 -> Word32 #

Norm Word64 Word64 
Instance details

Defined in NumHask.Algebra.Metric

Methods

norm :: Word64 -> Word64 #

basis :: Word64 -> Word64 #

ExpField a => Norm (Complex a) a

A euclidean-style norm is strong convention for Complex.

Instance details

Defined in NumHask.Data.Complex

Methods

norm :: Complex a -> a #

basis :: Complex a -> Complex a #

(ExpField a, Eq a) => Norm (Point a) a 
Instance details

Defined in NumHask.Space.Point

Methods

norm :: Point a -> a #

basis :: Point a -> Point a #

(Ord a, Signed a, Integral a, Ring a) => Norm (Ratio a) (Ratio a) 
Instance details

Defined in NumHask.Data.Rational

Methods

norm :: Ratio a -> Ratio a #

basis :: Ratio a -> Ratio a #

class (Additive a, Multiplicative a) => Signed a where #

signum from base is not an operator name in numhask and is replaced by sign. Compare with Norm where there is a change in codomain.

\a -> abs a * sign a ~= a

abs zero == zero, so any value for sign zero is ok. We choose lawful neutral:

>>> sign zero == zero
True
>>> abs (-1)
1
>>> sign (-1)
-1

Methods

sign :: a -> a #

abs :: a -> a #

Instances

Instances details
Signed Double 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Double -> Double #

abs :: Double -> Double #

Signed Float 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Float -> Float #

abs :: Float -> Float #

Signed Int 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Int -> Int #

abs :: Int -> Int #

Signed Int8 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Int8 -> Int8 #

abs :: Int8 -> Int8 #

Signed Int16 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Int16 -> Int16 #

abs :: Int16 -> Int16 #

Signed Int32 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Int32 -> Int32 #

abs :: Int32 -> Int32 #

Signed Int64 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Int64 -> Int64 #

abs :: Int64 -> Int64 #

Signed Integer 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Integer -> Integer #

abs :: Integer -> Integer #

Signed Natural 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Natural -> Natural #

abs :: Natural -> Natural #

Signed Word 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Word -> Word #

abs :: Word -> Word #

Signed Word8 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Word8 -> Word8 #

abs :: Word8 -> Word8 #

Signed Word16 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Word16 -> Word16 #

abs :: Word16 -> Word16 #

Signed Word32 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Word32 -> Word32 #

abs :: Word32 -> Word32 #

Signed Word64 
Instance details

Defined in NumHask.Algebra.Metric

Methods

sign :: Word64 -> Word64 #

abs :: Word64 -> Word64 #

(Ord a, Signed a, Integral a, Ring a) => Signed (Ratio a) 
Instance details

Defined in NumHask.Data.Rational

Methods

sign :: Ratio a -> Ratio a #

abs :: Ratio a -> Ratio a #

(Ord a, Field a) => Signed (Rect a) 
Instance details

Defined in NumHask.Space.Rect

Methods

sign :: Rect a -> Rect a #

abs :: Rect a -> Rect a #

Signed a => Signed (Point a) 
Instance details

Defined in NumHask.Space.Point

Methods

sign :: Point a -> Point a #

abs :: Point a -> Point a #

(Field a, Subtractive a, Eq a, Ord a) => Signed (Range a) 
Instance details

Defined in NumHask.Space.Range

Methods

sign :: Range a -> Range a #

abs :: Range a -> Range a #

Re-exports