+'e     None=K+A wrapper for two-dimensional vector types.  ! ! John LatoBSD3 (see LICENSE)John Lato <jwlato@gmail.com>unstableunknownNone&-3"The necessary  Constraint+ for working with multi-dimensional ranges.A starting point and durationA '(minimum,maximum)' pairDefine 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 S. For multi-dimensional types, this probably isn't correct. For that case, see  A curried form of  fromBoundsSee 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.The union is constructed by calculating the difference vector between two points, performing a basis decomposition on that vector, performing comparisons and 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 %m. It does require that the 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. 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 rangeTrue 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."&  restrictionoriginal Range'(N)*+,-./0$123456789:;<=>?@%ABCDEFGHIJKLMNOPQRSTUVW   "& '(X      !"#$%&'()'*+,-.'(/'(0'(1'(2'(3'(4'(5'(6'78'79'7:'7;'7<'7='*>'*?'*@'*A'*B'*C'*D'*E'*F'*G'*H'*I'JK'JL'JM'JN'JO'JP'JQ'JR'JS'JT'JTUVWUVXUVYUVZUV[UV\UV]UV^UV_UV`arange-space-0.1.2.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.10.2Data.AffineSpace AffineSpaceData.VectorSpace VectorSpaceunRange$fSemigroupRange$fApplicativeRange affineComboalerpdistance distanceSq.-^.+^.-.Diff Data.Basis recompose decompose' decompose basisValueBasisHasBasisproject normalized magnitude magnitudeSq linearCombolerp^*^/*^Scalar<.> InnerSpaceData.AdditiveGroupinSum2inSumsumV^-^negateV^+^zeroV AdditiveGroupgetSumSumvector-space-points-0.2.1.1Data.AffineSpace.PointreflectThrough relative3 relative2relativemirror*.originunPointPPoint