-- 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.3.0


-- | I would have used V2 from the linear package, but wanted to avoid the
--   lens dependency. And there's no canonical treatment out there.
module NumHask.Pair

-- | A pair of a's, implemented as a tuple, but api represented as a Pair
--   of a's.
--   
--   <pre>
--   &gt;&gt;&gt; fmap (+1) (Pair 1 2)
--   Pair 2 3
--   
--   &gt;&gt;&gt; pure one :: Pair Int
--   Pair 1 1
--   
--   &gt;&gt;&gt; (*) &lt;$&gt; Pair 1 2 &lt;*&gt; pure 2
--   Pair 2 4
--   
--   &gt;&gt;&gt; foldr (++) [] (Pair [1,2] [3])
--   [1,2,3]
--   
--   &gt;&gt;&gt; Pair "a" "pair" `mappend` pure " " `mappend` Pair "string" "mappended"
--   Pair "a string" "pair mappended"
--   </pre>
--   
--   As a Ring and Field class
--   
--   <pre>
--   &gt;&gt;&gt; Pair 0 1 + zero
--   Pair 0 1
--   
--   &gt;&gt;&gt; Pair 0 1 + Pair 2 3
--   Pair 2 4
--   
--   &gt;&gt;&gt; Pair 1 1 - one
--   Pair 0 0
--   
--   &gt;&gt;&gt; Pair 0 1 * one
--   Pair 0 1
--   
--   &gt;&gt;&gt; Pair 0 1 / one
--   Pair 0.0 1.0
--   
--   &gt;&gt;&gt; Pair 11 12 `mod` (pure 6)
--   Pair 5 0
--   </pre>
--   
--   As a numhask module
--   
--   <pre>
--   &gt;&gt;&gt; Pair 1 2 .+ 3
--   Pair 4 5
--   </pre>
--   
--   representables
--   
--   <pre>
--   &gt;&gt;&gt; distribute [Pair 1 2, Pair 3 4]
--   Pair [1,3] [2,4]
--   
--   &gt;&gt;&gt; index (Pair 'l' 'r') False
--   'l'
--   </pre>
newtype Pair a
Pair' :: (a, a) -> Pair a

-- | the preferred pattern
instance GHC.Generics.Generic (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 (GHC.Classes.Eq a, GHC.Classes.Ord a, NumHask.Algebra.Metric.Signed a, NumHask.Algebra.Additive.Additive a) => GHC.Classes.Ord (NumHask.Pair.Pair 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)
instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Basis.AdditiveBasis NumHask.Pair.Pair a
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Basis.AdditiveGroupBasis NumHask.Pair.Pair a
instance NumHask.Algebra.Multiplicative.Multiplicative a => NumHask.Algebra.Basis.MultiplicativeBasis NumHask.Pair.Pair a
instance NumHask.Algebra.Multiplicative.MultiplicativeGroup a => NumHask.Algebra.Basis.MultiplicativeGroupBasis NumHask.Pair.Pair a
instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Module.AdditiveModule NumHask.Pair.Pair a
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Module.AdditiveGroupModule NumHask.Pair.Pair a
instance NumHask.Algebra.Multiplicative.Multiplicative a => NumHask.Algebra.Module.MultiplicativeModule NumHask.Pair.Pair a
instance NumHask.Algebra.Multiplicative.MultiplicativeGroup a => NumHask.Algebra.Module.MultiplicativeGroupModule NumHask.Pair.Pair a
instance NumHask.Algebra.Singleton.Singleton NumHask.Pair.Pair


-- | A <a>Space</a> represents an abstract continuous range class for a
--   type. The <a>interval</a> package is an alternative approach.
module NumHask.Space

-- | space laws
--   
--   <pre>
--   a `union` nul == a
--   a `union` a == a
--   project o n (lower o) == lower n
--   project o n (upper o) == upper n
--   project a a == id
--   </pre>
class (Eq (Element s), Ord (Element s), Field (Element s)) => Space s 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

-- | do two spaces intersect?
disjoint :: Space s => s -> s -> Bool

-- | do two spaces intersect?
intersects :: 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 :: Space s => s -> s -> Element s -> Element s

-- | create equally-spaced <tt>a</tt>s 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
instance GHC.Generics.Generic NumHask.Space.Pos
instance GHC.Show.Show NumHask.Space.Pos


-- | representation of a continuous range of a type
module NumHask.Range

-- | A continuous range over type a
--   
--   <pre>
--   &gt;&gt;&gt; let a = Range (-1) 1
--   
--   &gt;&gt;&gt; a
--   Range -1 1
--   
--   &gt;&gt;&gt; fmap (+1) (Range 1 2)
--   Range 2 3
--   
--   &gt;&gt;&gt; one :: Range Double
--   Range -0.5 0.5
--   
--   &gt;&gt;&gt; zero :: Range Double
--   Range Infinity -Infinity
--   </pre>
--   
--   as a Field instance
--   
--   <pre>
--   &gt;&gt;&gt; Range 0 1 + zero
--   Range 0.0 1.0
--   
--   &gt;&gt;&gt; Range 0 1 + Range 2 3
--   Range 0.0 3.0
--   
--   &gt;&gt;&gt; Range 1 1 - one
--   Range 0.5 1.0
--   
--   &gt;&gt;&gt; Range 0 1 * one
--   Range 0.0 1.0
--   
--   &gt;&gt;&gt; Range 0 1 / one
--   Range 0.0 1.0
--   
--   &gt;&gt;&gt; P.singleton 2.3 :: Range Double
--   Range 2.3 2.3
--   
--   &gt;&gt;&gt; abs (Range 1 0)
--   Range 0.0 1.0
--   
--   &gt;&gt;&gt; sign (Range 1 0) == negate one
--   True
--   </pre>
--   
--   Idempotent
--   
--   <pre>
--   &gt;&gt;&gt; Range 0 2 + Range 0 2
--   Range 0.0 2.0
--   </pre>
--   
--   as a space instance
--   
--   <pre>
--   &gt;&gt;&gt; project (Range 0 1) (Range 1 4) 0.5
--   2.5
--   
--   &gt;&gt;&gt; grid OuterPos (Range 0 10) 5
--   [0.0,2.0,4.0,6.0,8.0,10.0]
--   
--   &gt;&gt;&gt; gridSpace (Range 0 1) 4
--   [Range 0.0 0.25,Range 0.25 0.5,Range 0.5 0.75,Range 0.75 1.0]
--   
--   &gt;&gt;&gt; gridSensible OuterPos (Range (-12) 23) 6
--   [-10.0,-5.0,0.0,5.0,10.0,15.0,20.0]
--   </pre>
newtype Range a
Range' :: (a, a) -> Range a

-- | A tuple is the preferred concrete implementation of a Range, due to
--   many libraries having substantial optimizations for tuples already (eg
--   <tt>Vector</tt>). 'Pattern Synonyms' allow us to recover a constructor
--   without the need for tuple syntax.

-- | turn a range into n <tt>a</tt>s pleasing to human sense and
--   sensibility the <tt>a</tt>s may well lie outside the original range as
--   a result
gridSensible :: (Fractional a, Ord a, FromInteger a, QuotientField a, ExpField a) => Pos -> Range a -> Int -> [a]
instance GHC.Generics.Generic (NumHask.Range.Range a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (NumHask.Range.Range a)
instance GHC.Show.Show a => GHC.Show.Show (NumHask.Range.Range a)
instance Data.Functor.Classes.Eq1 NumHask.Range.Range
instance Data.Functor.Classes.Show1 NumHask.Range.Range
instance GHC.Base.Functor NumHask.Range.Range
instance Data.Functor.Bind.Class.Apply NumHask.Range.Range
instance GHC.Base.Applicative NumHask.Range.Range
instance GHC.Base.Monad NumHask.Range.Range
instance Data.Foldable.Foldable NumHask.Range.Range
instance Data.Semigroup.Foldable.Class.Foldable1 NumHask.Range.Range
instance Data.Traversable.Traversable NumHask.Range.Range
instance Data.Semigroup.Traversable.Class.Traversable1 NumHask.Range.Range
instance Data.Distributive.Distributive NumHask.Range.Range
instance Data.Functor.Rep.Representable NumHask.Range.Range
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NumHask.Range.Range a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveMagma (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveUnital (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveAssociative (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveInvertible (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveCommutative (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.Additive (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveGroup (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeMagma (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeUnital (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeAssociative (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeInvertible (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeCommutative (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.Multiplicative (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeGroup (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Additive.AdditiveInvertible a, NumHask.Algebra.Field.BoundedField a, GHC.Classes.Ord a) => NumHask.Algebra.Metric.Signed (NumHask.Range.Range a)
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Metric.Normed (NumHask.Range.Range a) a
instance (GHC.Classes.Ord a, NumHask.Algebra.Additive.AdditiveGroup a) => NumHask.Algebra.Metric.Metric (NumHask.Range.Range a) a
instance (NumHask.Algebra.Field.BoundedField a, GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Metric.Epsilon a) => NumHask.Algebra.Metric.Epsilon (NumHask.Range.Range a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Space.Space (NumHask.Range.Range a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => GHC.Base.Monoid (NumHask.Range.Range a)
instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Basis.AdditiveBasis NumHask.Range.Range a
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Basis.AdditiveGroupBasis NumHask.Range.Range a
instance NumHask.Algebra.Multiplicative.Multiplicative a => NumHask.Algebra.Basis.MultiplicativeBasis NumHask.Range.Range a
instance NumHask.Algebra.Multiplicative.MultiplicativeGroup a => NumHask.Algebra.Basis.MultiplicativeGroupBasis NumHask.Range.Range a
instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Module.AdditiveModule NumHask.Range.Range a
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Module.AdditiveGroupModule NumHask.Range.Range a
instance NumHask.Algebra.Multiplicative.Multiplicative a => NumHask.Algebra.Module.MultiplicativeModule NumHask.Range.Range a
instance NumHask.Algebra.Multiplicative.MultiplicativeGroup a => NumHask.Algebra.Module.MultiplicativeGroupModule NumHask.Range.Range a
instance NumHask.Algebra.Singleton.Singleton NumHask.Range.Range
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => GHC.Classes.Ord (NumHask.Range.Range a)


-- | a two-dimensional plane, implemented as a composite of a <a>Pair</a>
--   of <a>Range</a>s.
module NumHask.Rect

-- | a <a>Pair</a> of <a>Ranges</a> that form a rectangle in what is often
--   thought of as the XY plane.
--   
--   <pre>
--   &gt;&gt;&gt; let a = Rect (-1) 1 (-2) 4
--   
--   &gt;&gt;&gt; a
--   Rect -1 1 -2 4
--   
--   &gt;&gt;&gt; let (Ranges x y) = a
--   
--   &gt;&gt;&gt; x
--   Range -1 1
--   
--   &gt;&gt;&gt; y
--   Range -2 4
--   
--   &gt;&gt;&gt; fmap (+1) (Rect 1 2 3 4)
--   Rect 2 3 4 5
--   
--   &gt;&gt;&gt; one :: Rect Double
--   Rect -0.5 0.5 -0.5 0.5
--   
--   &gt;&gt;&gt; zero :: Rect Double
--   Rect Infinity -Infinity Infinity -Infinity
--   </pre>
--   
--   as a Field instance
--   
--   <pre>
--   &gt;&gt;&gt; Rect 0 1 2 3 + zero
--   Rect 0.0 1.0 2.0 3.0
--   
--   &gt;&gt;&gt; Rect 0 1 (-2) (-1) + Rect 2 3 (-5) 3
--   Rect 0.0 3.0 -5.0 3.0
--   
--   &gt;&gt;&gt; Rect 1 1 1 1 - one
--   Rect 0.5 1.0 0.5 1.0
--   
--   &gt;&gt;&gt; Rect 0 1 0 1 * one
--   Rect 0.0 1.0 0.0 1.0
--   
--   &gt;&gt;&gt; Rect 0 1 0 1 / one
--   Rect 0.0 1.0 0.0 1.0
--   
--   &gt;&gt;&gt; singleton (Pair 1.0 2.0) :: Rect Double
--   Rect 1.0 1.0 2.0 2.0
--   
--   &gt;&gt;&gt; abs (Rect 1 0 1 0)
--   Rect 0.0 1.0 0.0 1.0
--   
--   &gt;&gt;&gt; sign (Rect 1 0 1 0) == negate one
--   True
--   </pre>
--   
--   as a Space instance
--   
--   <pre>
--   &gt;&gt;&gt; project (Rect 0 1 (-1) 0) (Rect 1 4 10 0) (Pair 0.5 1)
--   Pair 2.5 -10.0
--   
--   &gt;&gt;&gt; gridSpace (Rect 0 10 0 1) (Pair 2 2)
--   [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]
--   
--   &gt;&gt;&gt; grid MidPos (Rect 0 10 0 1) (Pair 2 2)
--   [Pair 2.5 0.25,Pair 2.5 0.75,Pair 7.5 0.25,Pair 7.5 0.75]
--   </pre>
newtype Rect a
Rect' :: (Compose Pair Range a) -> Rect a

-- | pattern of Rect lowerx upperx lowery uppery

-- | pattern of Ranges xrange yrange

-- | create a list of pairs representing the lower left and upper right
--   cormners of a rectangle.
corners :: (Signed a, FromInteger a, BoundedField a, Ord a) => Rect a -> [Pair a]

-- | project a Rect from an old range to a new one
projectRect :: (Signed a, 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 Data.Semigroup.Traversable.Class.Traversable1 NumHask.Rect.Rect
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Additive.AdditiveMagma (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Additive.AdditiveUnital (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveAssociative (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Additive.AdditiveCommutative (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveIdempotent (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Additive.Additive (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveInvertible (NumHask.Rect.Rect a)
instance (GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => NumHask.Algebra.Additive.AdditiveGroup (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 (NumHask.Algebra.Field.BoundedField a, GHC.Classes.Ord a, NumHask.Algebra.Integral.FromInteger a, NumHask.Algebra.Metric.Epsilon a) => NumHask.Algebra.Metric.Epsilon (NumHask.Rect.Rect a)
instance Data.Distributive.Distributive NumHask.Rect.Rect
instance Data.Functor.Rep.Representable NumHask.Rect.Rect
instance (NumHask.Algebra.Metric.Signed a, NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Space.Space (NumHask.Rect.Rect a)
instance (NumHask.Algebra.Metric.Signed a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a, NumHask.Algebra.Integral.FromInteger a) => GHC.Base.Monoid (NumHask.Rect.Rect a)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NumHask.Rect.Rect a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NumHask.Rect.Rect a)
instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Basis.AdditiveBasis NumHask.Rect.Rect a
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Basis.AdditiveGroupBasis NumHask.Rect.Rect a
instance NumHask.Algebra.Multiplicative.Multiplicative a => NumHask.Algebra.Basis.MultiplicativeBasis NumHask.Rect.Rect a
instance NumHask.Algebra.Multiplicative.MultiplicativeGroup a => NumHask.Algebra.Basis.MultiplicativeGroupBasis NumHask.Rect.Rect a
instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Module.AdditiveModule NumHask.Rect.Rect a
instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Module.AdditiveGroupModule NumHask.Rect.Rect a
instance NumHask.Algebra.Multiplicative.Multiplicative a => NumHask.Algebra.Module.MultiplicativeModule NumHask.Rect.Rect a
instance NumHask.Algebra.Multiplicative.MultiplicativeGroup a => NumHask.Algebra.Module.MultiplicativeGroupModule NumHask.Rect.Rect a
instance NumHask.Algebra.Singleton.Singleton NumHask.Rect.Rect


-- | representation of a possibly discontinuous range
module NumHask.RangeD
newtype RangeD a
RangeD :: [Range a] -> RangeD a
normalise :: (Ord (Range a), Ord a, BoundedField a, FromInteger a) => RangeD a -> RangeD a
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NumHask.RangeD.RangeD a)
instance Data.Traversable.Traversable NumHask.RangeD.RangeD
instance Data.Foldable.Foldable NumHask.RangeD.RangeD
instance GHC.Base.Functor NumHask.RangeD.RangeD
instance GHC.Show.Show a => GHC.Show.Show (NumHask.RangeD.RangeD a)
instance GHC.Generics.Generic (NumHask.RangeD.RangeD a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (NumHask.RangeD.RangeD a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveMagma (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveUnital (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveAssociative (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveInvertible (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveCommutative (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.Additive (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Additive.AdditiveGroup (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeMagma (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeUnital (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeAssociative (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeInvertible (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeCommutative (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.Multiplicative (NumHask.RangeD.RangeD a)
instance (NumHask.Algebra.Integral.FromInteger a, GHC.Classes.Ord a, NumHask.Algebra.Field.BoundedField a) => NumHask.Algebra.Multiplicative.MultiplicativeGroup (NumHask.RangeD.RangeD a)
