-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Numbers that are range representations -- -- Numbers that represent ranges of all sorts. @package numhask-range @version 0.1.0 -- | A Space represents a continuous interval of a type a. The -- interval package is an alternative approach. module NumHask.Space class (Eq (Element s), Ord (Element s), Field (Element s)) => Space s where type Element s :: * type Grid s :: * mid s = (lower s + upper s) / (one + one) width s = upper s - lower s singular s = lower s == upper s element a s = a >= lower s && a <= upper s contains s0 s1 = lower s0 <= lower s1 && upper s0 >= upper s1 space = foldr (\ a x -> x `union` singleton a) nul project s0 s1 p = ((p - lower s0) / (upper s0 - lower s0)) * (upper s1 - lower s1) + lower s1 where { type family Element s :: *; type family Grid s :: *; } -- | lower boundary of space lower :: Space s => s -> Element s -- | upper boundary of space upper :: Space s => s -> Element s -- | mid-point of the space mid :: Space s => s -> Element s -- | distance between boundaries width :: Space s => s -> Element s -- | singleton space singleton :: Space s => Element s -> s -- | zero-width test singular :: Space s => s -> Bool -- | determine whether an a is in the space element :: Space s => Element s -> s -> Bool -- | is a space contained within another? contains :: Space s => s -> s -> Bool -- | convex hull union :: Space s => s -> s -> s -- | null space, which can be interpreted as mempty nul :: Space s => s -- | the containing space of a Foldable space :: (Space s, Foldable f) => f (Element s) -> s -- | project a data point from an old range to a new range -- -- project o n (lower o) == lower n -- -- project o n (upper o) == upper n -- -- project a a == id project :: Space s => s -> s -> Element s -> Element s -- | create equally-spaced as from a space grid :: Space s => Pos -> s -> Grid s -> [Element s] -- | create equally-spaced `Space a`s from a space gridSpace :: Space s => s -> Grid s -> [s] -- | Pos suggests where data points are placed on a grid across a range. -- Pos can also be thought about as whether the lower and upper points on -- the range are open or closed (plus the mid-point as an extra option). data Pos OuterPos :: Pos InnerPos :: Pos LowerPos :: Pos UpperPos :: Pos MidPos :: Pos instance GHC.Classes.Eq NumHask.Space.Pos -- | 'Range -0.5 0.5 :: Range Double' is a 1-dimensional instance of a -- 'Space Double' from -0.5 to 0.5 on the Double number line. -- -- The instances chosen for Range are conducive to Charting. -- Specifically: -- --
-- >>> fmap (+1) (Pair 1 2) -- Pair 2 3 ---- --
-- >>> pure one :: Pair Int -- Pair 1 1 ---- --
-- >>> (*) <$> Pair 1 2 <*> pure 2 -- Pair 2 4 ---- --
-- >>> foldr (++) [] (Pair [1,2] [3]) -- [1,2,3] ---- --
-- >>> Pair "a" "pair" <> pure " " <> Pair "string" "mappend" -- Pair "a string" "pair mappend" ---- -- | numerics >>> Pair 0 1 + zero Pair 0 1 -- --
-- >>> Pair 0 1 + Pair 2 3 -- Pair 2 4 ---- --
-- >>> Pair 1 1 - one -- Pair 0 0 ---- --
-- >>> Pair 0 1 * one -- Pair 0 1 ---- --
-- >>> Pair 0 1 / one -- Pair 0.0 1.0 ---- --
-- >>> Pair 11 12 `mod` (pure 6) -- Pair 5 0 ---- -- | module >>> Pair 1 2 .+ 3 Pair 4 5 -- -- | representations >>> distribute [Pair 1 2, Pair 3 4] Pair -- [1,3] [2,4] -- --
-- >>> index (Pair 'l' 'r') LPair -- 'l' ---- -- A pair of a's, implemented as a tuple, but api represented as a Pair -- of a's. newtype Pair a Pair' :: (a, a) -> Pair a instance GHC.Generics.Generic (NumHask.Pair.Pair a) instance GHC.Classes.Ord a => GHC.Classes.Ord (NumHask.Pair.Pair a) instance GHC.Classes.Eq a => GHC.Classes.Eq (NumHask.Pair.Pair a) instance GHC.Show.Show a => GHC.Show.Show (NumHask.Pair.Pair a) instance GHC.Base.Functor NumHask.Pair.Pair instance Data.Functor.Classes.Eq1 NumHask.Pair.Pair instance Data.Functor.Classes.Show1 NumHask.Pair.Pair instance Data.Functor.Bind.Class.Apply NumHask.Pair.Pair instance GHC.Base.Applicative NumHask.Pair.Pair instance GHC.Base.Monad NumHask.Pair.Pair instance Data.Foldable.Foldable NumHask.Pair.Pair instance Data.Semigroup.Foldable.Class.Foldable1 NumHask.Pair.Pair instance Data.Traversable.Traversable NumHask.Pair.Pair instance Data.Semigroup.Traversable.Class.Traversable1 NumHask.Pair.Pair instance GHC.Base.Monoid a => GHC.Base.Monoid (NumHask.Pair.Pair a) instance Data.Distributive.Distributive NumHask.Pair.Pair instance Data.Functor.Rep.Representable NumHask.Pair.Pair instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NumHask.Pair.Pair a) instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NumHask.Pair.Pair a) instance NumHask.Algebra.Additive.AdditiveMagma a => NumHask.Algebra.Additive.AdditiveMagma (NumHask.Pair.Pair a) instance NumHask.Algebra.Additive.AdditiveUnital a => NumHask.Algebra.Additive.AdditiveUnital (NumHask.Pair.Pair a) instance NumHask.Algebra.Additive.AdditiveMagma a => NumHask.Algebra.Additive.AdditiveAssociative (NumHask.Pair.Pair a) instance NumHask.Algebra.Additive.AdditiveMagma a => NumHask.Algebra.Additive.AdditiveCommutative (NumHask.Pair.Pair a) instance NumHask.Algebra.Additive.AdditiveUnital a => NumHask.Algebra.Additive.Additive (NumHask.Pair.Pair a) instance NumHask.Algebra.Additive.AdditiveInvertible a => NumHask.Algebra.Additive.AdditiveInvertible (NumHask.Pair.Pair a) instance (NumHask.Algebra.Additive.AdditiveUnital a, NumHask.Algebra.Additive.AdditiveInvertible a) => NumHask.Algebra.Additive.AdditiveGroup (NumHask.Pair.Pair a) instance NumHask.Algebra.Multiplicative.MultiplicativeMagma a => NumHask.Algebra.Multiplicative.MultiplicativeMagma (NumHask.Pair.Pair a) instance NumHask.Algebra.Multiplicative.MultiplicativeUnital a => NumHask.Algebra.Multiplicative.MultiplicativeUnital (NumHask.Pair.Pair a) instance NumHask.Algebra.Multiplicative.MultiplicativeMagma a => NumHask.Algebra.Multiplicative.MultiplicativeAssociative (NumHask.Pair.Pair a) instance NumHask.Algebra.Multiplicative.MultiplicativeMagma a => NumHask.Algebra.Multiplicative.MultiplicativeCommutative (NumHask.Pair.Pair a) instance NumHask.Algebra.Multiplicative.MultiplicativeUnital a => NumHask.Algebra.Multiplicative.Multiplicative (NumHask.Pair.Pair a) instance NumHask.Algebra.Multiplicative.MultiplicativeInvertible a => NumHask.Algebra.Multiplicative.MultiplicativeInvertible (NumHask.Pair.Pair a) instance (NumHask.Algebra.Multiplicative.MultiplicativeUnital a, NumHask.Algebra.Multiplicative.MultiplicativeInvertible a) => NumHask.Algebra.Multiplicative.MultiplicativeGroup (NumHask.Pair.Pair a) instance NumHask.Algebra.Integral.Integral a => NumHask.Algebra.Integral.Integral (NumHask.Pair.Pair a) instance NumHask.Algebra.Metric.Signed a => NumHask.Algebra.Metric.Signed (NumHask.Pair.Pair a) instance (NumHask.Algebra.Field.ExpField a, NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeUnital a) => NumHask.Algebra.Metric.Normed (NumHask.Pair.Pair a) a instance NumHask.Algebra.Metric.Epsilon a => NumHask.Algebra.Metric.Epsilon (NumHask.Pair.Pair a) instance NumHask.Algebra.Field.ExpField a => NumHask.Algebra.Metric.Metric (NumHask.Pair.Pair a) a instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Distribution.Distribution a) => NumHask.Algebra.Distribution.Distribution (NumHask.Pair.Pair a) instance NumHask.Algebra.Ring.Ring a => NumHask.Algebra.Ring.Ring (NumHask.Pair.Pair a) instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Ring.Semiring a) => NumHask.Algebra.Ring.Semiring (NumHask.Pair.Pair a) instance NumHask.Algebra.Ring.CRing a => NumHask.Algebra.Ring.CRing (NumHask.Pair.Pair a) instance NumHask.Algebra.Field.Field a => NumHask.Algebra.Field.Field (NumHask.Pair.Pair a) instance NumHask.Algebra.Field.ExpField a => NumHask.Algebra.Field.ExpField (NumHask.Pair.Pair a) instance NumHask.Algebra.Field.BoundedField a => NumHask.Algebra.Field.BoundedField (NumHask.Pair.Pair a) module NumHask.Rect -- | a two-dimensional plane, implemented as a composite of a Pair -- of Ranges. newtype Rect a Rect' :: (Compose Pair Range a) -> Rect a corners :: (FromInteger a, BoundedField a, Ord a) => Rect a -> [Pair a] -- | project a Rect from an old Rect range to a new one projectRect :: (FromInteger a, Ord a, BoundedField a) => Rect a -> Rect a -> Rect a -> Rect a instance Data.Traversable.Traversable NumHask.Rect.Rect instance Data.Semigroup.Foldable.Class.Foldable1 NumHask.Rect.Rect instance Data.Foldable.Foldable NumHask.Rect.Rect instance GHC.Base.Applicative NumHask.Rect.Rect instance Data.Functor.Bind.Class.Apply NumHask.Rect.Rect instance GHC.Base.Functor NumHask.Rect.Rect instance GHC.Classes.Eq a => GHC.Classes.Eq (NumHask.Rect.Rect a) instance GHC.Show.Show a => GHC.Show.Show (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Multiplicative.MultiplicativeMagma (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Multiplicative.MultiplicativeUnital (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeAssociative (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Multiplicative.MultiplicativeCommutative (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Multiplicative.Multiplicative (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeInvertible (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Multiplicative.MultiplicativeGroup (NumHask.Rect.Rect a) instance (NumHask.Algebra.Additive.AdditiveInvertible a, NumHask.Algebra.Field.BoundedField a, GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Metric.Signed (NumHask.Rect.Rect a) instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Metric.Normed (NumHask.Rect.Rect a) (NumHask.Pair.Pair a) instance Data.Distributive.Distributive NumHask.Rect.Rect instance Data.Functor.Rep.Representable NumHask.Rect.Rect instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Space.Space (NumHask.Rect.Rect a) instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => GHC.Base.Monoid (NumHask.Rect.Rect a)