+'     None,A wrapper for two-dimensional vector types.  ! !unknownunstableJohn Lato <jwlato@gmail.com>None"The necessary  Constraint, for working with multi-dimensional ranges. A starting point and duration A '(minimum,maximum)' pair  Define a Range over some domain  Convert a Range to a ' (min,max)' pair.  Generate a Span, '(start, distance)' from a   Generate a Range from a Span '(start, distance)'  A curried fromSpan  Create a Range from a ' (min,max)'  pair.   uses the # instance to construct a . For + multi-dimensional types, this probably isn't correct. For that case, see   A curried form of  fromBounds See the notes for  fromBounds. Get the range covered by a Range  Translate a  by the given amount. Create a range from a ' start,stop'& pair. For multi-dimensional ranges, : the resulting range will be the union of the two points. Calculate the union of two . See the notes for  unionRange. Calculate the union of two s, per-basis. RThe union is constructed by calculating the difference vector between two points, M performing a basis decomposition on that vector, performing comparisons and N adjustments on each basis vector, recomposing, and adding the result back to  the starting position. 4The advantage of this method is that it works on an $ and  doesn't require a full %. It does require that the E affine space scalars are in a vector space, but this is more easily  satisfiable.  Restrict a  by applying a sub- mask. >For ranges with multiple dimensions, the masking is performed  independently for each basis. B If the range lies entirely outside the mask, the returned value  is 'Range rmin rmin' (per-basis) -Create a 2D range from two independent axes. Decompose a 2D range into X/Y axes. /Calculate the X extent of a 2D pointwise range /Calculate the Y extent of a 2D pointwise range True if a value lies inside a . Check if a value is in a Range, using # comparison. If #- is usable, this is likely to be faster than inRange. Compare a value to a Range . Returns EQ if the value is  inside the range, LT or GT if it' s outside. Uses Ord for comparison. "&  restriction original Range '(H)*+,-./$0123456789:;<=>?%@ABCDEFGHIJKLMNOPQ   "& '(R      !"#$%&'()'*+,-.'(/'(0'(1'(2'(3'(4'(5'67'68'69'6:'6;'6<'6='*>'*?'*@'*A'*B'*C'*D'*E'*F'*G'*H'IJ'IK'IL'IM'IN'IO'IP'IQ'IR'IS'ISTUVTUWTUXTUYTUZ[range-space-0.1.1.0Data.RangeSpace.TwoDData.RangeSpaceD2VxAxisyAxisSpanBoundsRangetoBoundstoSpanfromSpan fromSpanC fromBounds fromBoundsC rangeStartrangeEndrangetranslateRangenewRange unionBounds unionRange maskRangerange2D fromRange2DextentXextentYinRange inOrdRange compareRange $fHasBasisD2V$fVectorSpaceD2V$fAffineSpaceD2V$fAdditiveGroupD2V$fNumD2V BasisRangeghc-prim GHC.ClassesOrdvector-space-0.8.6Data.AffineSpace AffineSpaceData.VectorSpace VectorSpaceunRange$fSemigroupRange$fApplicativeRangealerpdistance distanceSq.-^.+^.-.Diff Data.Basis recompose linearCombo decompose' decompose basisValueBasisHasBasisproject normalized magnitude magnitudeSqlerp^*^/*^Scalar<.> InnerSpaceData.AdditiveGroupinSum2inSumsumV^-^negateV^+^zeroV AdditiveGroupgetSumSumvector-space-points-0.1.2.0Data.AffineSpace.Point*.originunPointPPoint