úÎWĄO­˜      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—None-23459:;<=@DRbĐ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). space laws wa `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 lower boundary of space upper boundary of space mid-point of the space distance between boundaries singleton spacezero-width test&determine whether an a is in the space$is a space contained within another? convex hull.null space, which can be interpreted as mempty"the containing space of a Foldable5project a data point from an old range to a new rangecreate equally-spaced as from a space-create equally-spaced `Space a`s from a space     None -23459:;<=@DRbA continuous range over type alet a = Range (-1) 1a Range -1 1fmap (+1) (Range 1 2) Range 2 3one :: Range DoubleRange -0.5 0.5zero :: Range DoubleRange Infinity -Infinityas a Field instanceRange 0 1 + zero Range 0.0 1.0Range 0 1 + Range 2 3 Range 0.0 3.0Range 1 1 - one Range 0.5 1.0Range 0 1 * one Range 0.0 1.0Range 0 1 / one Range 0.0 1.0singleton 2.3 :: Range Double Range 2.3 2.3abs (Range 1 0) Range 0.0 1.0sign (Range 1 0) == negate oneTrue IdempotentRange 0 2 + Range 0 2 Range 0.0 2.0as a space instance#project (Range 0 1) (Range 1 4) 0.52.5grid OuterPos (Range 0 10) 5[0.0,2.0,4.0,6.0,8.0,10.0]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](gridSensible OuterPos (Range (-12) 23) 6#[-10.0,-5.0,0.0,5.0,10.0,15.0,20.0]‹A tuple is the preferred concrete implementation of a Range, due to many libraries having substantial optimizations for tuples already (eg ˜[). 'Pattern Synonyms' allow us to recover a constructor without the need for tuple syntax.™theta is a bit like 1/infinityturn a range into n a/s pleasing to human sense and sensibility the a5s may well lie outside the original range as a result'-The unital object (Range -0.5 0.5) satisfies: width one = one mid zero = zero(Gtimes may well be some sort of affine projection lurking under the hood/convex hull union*š›™ !"#$%&'()*+,-./0123456789:;<=>)š›™ !"#$%&'()*+,-./0123456789:;<=>None-23459:;<=@DRbALA pair of a's, implemented as a tuple, but api represented as a Pair of a's.fmap (+1) (Pair 1 2)Pair 2 3pure one :: Pair IntPair 1 1(*) <$> Pair 1 2 <*> pure 2Pair 2 4foldr (++) [] (Pair [1,2] [3])[1,2,3]FPair "a" "pair" `mappend` pure " " `mappend` Pair "string" "mappended" Pair "a string" "pair mappended"As a Ring and Field classPair 0 1 + zeroPair 0 1Pair 0 1 + Pair 2 3Pair 2 4Pair 1 1 - onePair 0 0Pair 0 1 * onePair 0 1Pair 0 1 / one Pair 0.0 1.0Pair 11 12 `mod` (pure 6)Pair 5 0As a numhask module Pair 1 2 .+ 3Pair 4 5representablesdistribute [Pair 1 2, Pair 3 4]Pair [1,3] [2,4]index (Pair 'l' 'r') False'l'Cthe preferred patternML1-based Ord instance.ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnABCABC-ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnNone-2345:<=@DIRbqa A of sC that form a rectangle in what is often thought of as the XY plane.let a = Rect (-1) 1 (-2) 4aRect -1 1 -2 4let (Ranges x y) = ax Range -1 1y Range -2 4fmap (+1) (Rect 1 2 3 4) Rect 2 3 4 5one :: Rect DoubleRect -0.5 0.5 -0.5 0.5zero :: Rect Double*Rect Infinity -Infinity Infinity -Infinityas a Field instanceRect 0 1 2 3 + zeroRect 0.0 1.0 2.0 3.0$Rect 0 1 (-2) (-1) + Rect 2 3 (-5) 3Rect 0.0 3.0 -5.0 3.0Rect 1 1 1 1 - oneRect 0.5 1.0 0.5 1.0Rect 0 1 0 1 * oneRect 0.0 1.0 0.0 1.0Rect 0 1 0 1 / oneRect 0.0 1.0 0.0 1.0'singleton (Pair 1.0 2.0) :: Rect DoubleRect 1.0 1.0 2.0 2.0abs (Rect 1 0 1 0)Rect 0.0 1.0 0.0 1.0!sign (Rect 1 0 1 0) == negate oneTrueas a Space instance6project (Rect 0 1 (-1) 0) (Rect 1 4 10 0) (Pair 0.5 1)Pair 2.5 -10.0$gridSpace (Rect 0 10 0 1) (Pair 2 2)W[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 10 0 1) (Pair 2 2)9[Pair 2.5 0.25,Pair 2.5 0.75,Pair 7.5 0.25,Pair 7.5 0.75]spattern of Ranges xrange yranget+pattern of Rect lowerx upperx lowery upperyu[create a list of pairs representing the lower left and upper right cormners of a rectangle.v-project a Rect from an old range to a new one qrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽqrstuvqrtsuvqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽœ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFEGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvtwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ *numhask-range-0.1.1-8MET5LfqG7N1O1IjOp8GO8 NumHask.Space NumHask.Range NumHask.Pair NumHask.RectPosOuterPosInnerPosLowerPosUpperPosMidPosSpaceElementGridloweruppermidwidth singletonsingularelementcontainsunionnulspaceprojectgrid gridSpace$fEqPosRangeRange' gridSensible $fMonoidRange $fSpaceRange$fEpsilonRange$fMetricRangea$fNormedRangea $fSignedRange$fMultiplicativeGroupRange$fMultiplicativeRange $fMultiplicativeCommutativeRange$fMultiplicativeInvertibleRange $fMultiplicativeAssociativeRange$fMultiplicativeUnitalRange$fMultiplicativeMagmaRange$fAdditiveGroupRange$fAdditiveRange$fAdditiveCommutativeRange$fAdditiveInvertibleRange$fAdditiveAssociativeRange$fAdditiveUnitalRange$fAdditiveMagmaRange $fNFDataRange$fArbitraryRange$fRepresentableRange$fDistributiveRange$fTraversable1Range$fTraversableRange$fFoldable1Range$fFoldableRange $fMonadRange$fApplicativeRange $fApplyRange$fFunctorRange $fShow1Range $fEq1Range $fShowRange $fEqRange$fGenericRangePairPair'$fBoundedFieldPair$fExpFieldPair $fFieldPair $fCRingPair$fSemiringPair $fRingPair$fDistributionPair $fMetricPaira $fEpsilonPair $fOrdPair $fNormedPaira $fSignedPair$fIntegralPair$fMultiplicativeGroupPair$fMultiplicativeInvertiblePair$fMultiplicativePair$fMultiplicativeCommutativePair$fMultiplicativeAssociativePair$fMultiplicativeUnitalPair$fMultiplicativeMagmaPair$fAdditiveGroupPair$fAdditiveInvertiblePair$fAdditivePair$fAdditiveCommutativePair$fAdditiveAssociativePair$fAdditiveUnitalPair$fAdditiveMagmaPair$fArbitraryPair $fNFDataPair$fRepresentablePair$fDistributivePair $fMonoidPair$fTraversable1Pair$fTraversablePair$fFoldable1Pair$fFoldablePair $fMonadPair$fApplicativePair $fApplyPair $fShow1Pair $fEq1Pair $fFunctorPair $fShowPair$fEqPair $fGenericPairRectRect'Rangescorners projectRect $fNFDataRect$fArbitraryRect $fMonoidRect $fSpaceRect$fRepresentableRect$fDistributiveRect $fEpsilonRect$fNormedRectPair $fSignedRect$fMultiplicativeGroupRect$fMultiplicativeInvertibleRect$fMultiplicativeRect$fMultiplicativeCommutativeRect$fMultiplicativeAssociativeRect$fMultiplicativeUnitalRect$fMultiplicativeMagmaRect$fAdditiveGroupRect$fAdditiveInvertibleRect$fAdditiveRect$fAdditiveIdempotentRect$fAdditiveCommutativeRect$fAdditiveAssociativeRect$fAdditiveUnitalRect$fAdditiveMagmaRect$fTraversable1Rect $fShowRect$fEqRect $fFunctorRect $fApplyRect$fApplicativeRect$fFoldableRect$fFoldable1Rect$fTraversableRect$numhask-0.1.2-CirXD5LJjvW6VYl1VUTdt2NumHask.VectorVectorthetatwohalf