úÎ+Õ'Ê      Safe-Infered,A wrapper for two-dimensional vector types.  !" !"unknownunstableJohn Lato <jwlato@gmail.com> Safe-InferedA starting point and duration A '(minimum,maximum)' pair  Define a Range over some domain @This should be provided by the AffineSpace.Point module, but isn't.  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:;<=%>?@ABCDEFGHIJKLMN    &O      !"#$%&'()'*+,'(-'(.'(/'(0'(1'(2'(3'45'46'47'48'49'4:'4;'*<'*='*>'*?'*@'*A'*B'*C'*D'*E'*F'GH'GI'GJ'GK'GL'GM'GN'GO'GP'GQ'GQRSTRSURSVRSWXrange-space-0.1.0.0Data.RangeSpace.TwoDData.RangeSpaceD2VxAxisyAxisSpanBoundsRangeunPointtoBoundstoSpanfromSpan fromSpanC fromBounds fromBoundsC rangeStartrangeEndrangetranslateRangenewRange unionBounds unionRange maskRangerange2D fromRange2DextentXextentYinRange inOrdRange compareRange $fHasBasisD2V$fVectorSpaceD2V$fAffineSpaceD2V$fAdditiveGroupD2V$fNumD2Vghc-prim GHC.ClassesOrdvector-space-0.8.2Data.AffineSpace AffineSpaceData.VectorSpace VectorSpace$fApplicativeRangealerpdistance distanceSq.-^.+^.-.Diff Data.Basis recompose linearCombo decompose' decompose basisValueBasisHasBasisproject normalized magnitude magnitudeSqlerp^*^/*^Scalar<.> InnerSpaceData.AdditiveGroupinSum2inSumsumV^-^negateV^+^zeroV AdditiveGroupgetSumSumvector-space-points-0.1.1.1Data.AffineSpace.Point*.originPPoint