^R      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None6;<=>?BFT`dGLA 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'the preferred patternL1-based Ord instanceNone 6;<=BFT`$K<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).B 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 == idElower boundary of spaceFupper boundary of spaceGmid-point of the spaceHdistance between boundariesIsingleton spaceJzero-width testK&determine whether an a is in the spaceL$is a space contained within another?Mdo two spaces intersect?Ndo two spaces intersect?O convex hullP.null space, which can be interpreted as memptyQ"the containing space of a FoldableR5project a data point from an old range to a new rangeScreate equally-spaced as from a spaceT-create equally-spaced `Space a`s from a space<=>?@ABCDQHOIERGFJKLMNPSTBCEFGHIJKLMNOPQRDST<=>?@A<=>?@ABCEFGHIJKLMNOPQRDSTNone .6;<=>?BFT`d;GXA 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.0P.singleton 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]ZA tuple is the preferred concrete implementation of a Range, due to many libraries having substantial optimizations for tuples already (eg Vector[). 'Pattern Synonyms' allow us to recover a constructor without the need for tuple syntax.theta is a bit like 1/infinity[turn a range into n a/s pleasing to human sense and sensibility the a5s may well lie outside the original range as a resultr-The unital object (Range -0.5 0.5) satisfies: width one = one mid zero = zerosGtimes may well be some sort of affine projection lurking under the hoodzconvex hull unionXYZ[XYZ[XYNone.3456;=>?BFKT`dOa  of C 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]pattern of Ranges xrange yrange+pattern of Rect lowerx upperx lowery uppery[create a list of pairs representing the lower left and upper right cormners of a rectangle.-project a Rect from an old range to a new one#fixme: this is a deeply flawed hackNone .3456;<=>?BFKT`dQGtimes may well be some sort of affine projection lurking under the hoodSafeB`R`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_^`abcdefghijklmnopqrstuvwxyz{|}~,numhask-range-0.2.2.1-CuiYZN34Lwi4movg2vrydE NumHask.Pair NumHask.Space NumHask.Range NumHask.RectNumHask.RangeDPaths_numhask_rangePairPair'$fSingletonPair $fMultiplicativeGroupModulePaira$fMultiplicativeModulePaira$fAdditiveGroupModulePaira$fAdditiveModulePaira$fMultiplicativeGroupBasisPaira$fMultiplicativeBasisPaira$fAdditiveGroupBasisPaira$fAdditiveBasisPaira$fLowerBoundedFieldPair$fUpperBoundedFieldPair$fExpFieldPair $fFieldPair$fSemifieldPair $fCRingPair $fRingPair$fSemiringPair$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$fSemigroupPair$fTraversable1Pair$fTraversablePair$fFoldable1Pair$fFoldablePair $fMonadPair$fApplicativePair $fApplyPair $fShow1Pair $fEq1Pair $fFunctorPair $fShowPair$fEqPair $fGenericPairPosOuterPosInnerPosLowerPosUpperPosMidPosSpaceElementGridloweruppermidwidth singletonsingularelementcontainsdisjoint intersectsunionnulspaceprojectgrid gridSpace $fShowPos $fGenericPos$fEqPosRangeRange' gridSensible $fOrdRange$fSingletonRange!$fMultiplicativeGroupModuleRangea$fMultiplicativeModuleRangea$fAdditiveGroupModuleRangea$fAdditiveModuleRangea $fMultiplicativeGroupBasisRangea$fMultiplicativeBasisRangea$fAdditiveGroupBasisRangea$fAdditiveBasisRangea $fMonoidRange$fSemigroupRange $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$fGenericRangeRectRect'Rangescorners projectRect$fSingletonRect $fMultiplicativeGroupModuleRecta$fMultiplicativeModuleRecta$fAdditiveGroupModuleRecta$fAdditiveModuleRecta$fMultiplicativeGroupBasisRecta$fMultiplicativeBasisRecta$fAdditiveGroupBasisRecta$fAdditiveBasisRecta $fNFDataRect$fArbitraryRect $fMonoidRect$fSemigroupRect $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 $fGenericRectRangeD normalise$fMultiplicativeGroupRangeD$fMultiplicativeRangeD!$fMultiplicativeCommutativeRangeD $fMultiplicativeInvertibleRangeD!$fMultiplicativeAssociativeRangeD$fMultiplicativeUnitalRangeD$fMultiplicativeMagmaRangeD$fAdditiveGroupRangeD$fAdditiveRangeD$fAdditiveCommutativeRangeD$fAdditiveInvertibleRangeD$fAdditiveAssociativeRangeD$fAdditiveUnitalRangeD$fAdditiveMagmaRangeD$fNFDataRangeD $fEqRangeD$fGenericRangeD $fShowRangeD$fFunctorRangeD$fFoldableRangeD$fTraversableRangeD$fArbitraryRangeDthetaversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName