K      !"#$%&'()*+,-./0123456789:;<= > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   2All vector types belong to this class. Aside from  and , these methods aren'&t especially useful to end-users; they'=re used internally by the vector arithmetic implementations. 'Apply a function to all vector fields. UZip two vectors together field-by-field using the supplied function (in the style of Data.List.zipWith). qReduce a vector down to a single value using the supplied binary operator. The ordering in which this happens isn'Nt guaranteed, so the operator should probably be associative and commutative. UPack a list of values into a vector. Extra values are ignored, too few values yields Nothing. :Unpack a vector into a list of values. (Always succeeds.) !The type of vector field values. sScale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual (*) operator. The (*|) and (|*)R operators are identical, but with their argument flipped. Just remember that the '|' denotes the scalar part. sScale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual (*) operator. The (*|) and (|*)R operators are identical, but with their argument flipped. Just remember that the '|' denotes the scalar part.  Take the  dot product of two vectors. This is a scalar equal to the cosine of the angle between the two vectors multiplied by the length of each vectors. Return the length or  magnitudeF of a vector. (Note that this involves a slow square root operation.) |Normalise a vector. In order words, return a new vector with the same direction, but a length of exactly one. (If the vector'Js length is zero or very near to zero, the vector is returned unchanged.) 2Linearly interpolate between two points in space.  vlinear 0 a b = a vlinear 1 a b = b vlinear 0.5 a b- would give a point exactly half way between a and b in a straight line.     The type of 1D vectors. TOwing to its particularly simple structure, this type has more class instances than 'propper'+ vectors have. Still, for the most part you'll probably want to just use  itself directly.     Take the  cross productv of two 3D vectors. This produces a new 3D vector that is perpendicular to the plane of the first two vectors, and who'^s length is equal to the sine of the angle between those vectors multiplied by their lengths.  Note that a `vcross` b = negate (b `vcross` a).  dThe type of 1D linear transformations. Essentially, this is applying a linear function to a number.  Note the Monoid= instance, which gives you access to the identity transform (memptyM) and the ability to combine a series of transforms into a single transform (mappend). !"#$BApply a 1D transformation to a 1D point, yielding a new 1D point.  !"#$ !"#$ !"#!"#$ %'The type of 2D linear transformations.  Note the Monoid= instance, which gives you access to the identity transform (memptyM) and the ability to combine a series of transforms into a single transform (mappend). &'()*+,-BApply a 2D transformation to a 2D point, yielding a new 2D point. %&'()*+,- %&'()*+,- %&'()*+,&'()*+,-.'The type of 3D linear transformations.  Note the Monoid= instance, which gives you access to the identity transform (memptyM) and the ability to combine a series of transforms into a single transform (mappend). /0123456789:;<BApply a 3D transformation to a 3D point, yielding a new 3D point. ./0123456789:;<./0123456789:;<. /0123456789:;/0123456789:;< ='The type of 4D linear transformations.  Note the Monoid= instance, which gives you access to the identity transform (memptyM) and the ability to combine a series of transforms into a single transform (mappend). >?@ABCDEFGHIJKLMNOPQRSBApply a 4D transformation to a 4D point, yielding a new 4D point. =>?@ABCDEFGHIJKLMNOPQRS=>?@ABCDEFGHIJKLMNOPQRS=>?@ABCDEFGHIJKLMNOPQR>?@ABCDEFGHIJKLMNOPQRS TA UT. represents a continuous interval between two  endpoints. UVWX Given two s, construct a UTM (swapping the endpoints if necessary so that they are in the correct order. YQFind the bounds of a list of points. (Throws an exception if the list is empty.) ZTest whether a given  falls within a particular UT. [,Take the union of two ranges. The resulting UTq contains all points that the original ranges contained, plus any points between them (if the original ranges don' t overlap). \bTake the intersection of two ranges. If the ranges do not overlap, the intersection is empty, and _ is returned. (This is a good way to check whether two ranges overlap or not.) Otherwise a new UTB is returned that contains only the points common to both ranges. TUVWXYZ[\ TUVWXYZ[\ TUVWUVWXYZ[\ ]The ^] type is basically a UT+, but all the operations over it work with   (which is really  ). While it's called a bounding boxD, a 1-dimensional box is in truth a simple line interval, just like UT. ^_`SGiven two vectors, construct a bounding box (swapping the endpoints if necessary). aQFind the bounds of a list of points. (Throws an exception if the list is empty.) bTest whether a   lies within a ^]. c"Return the minimum endpoint for a ^]. d"Return the maximum endpoint for a ^]. eTake the union of two ^] values. The result is a new ^]_ that contains all the points the original boxes contained, plus any extra space between them. fTake the intersection of two ^]- values. If the boxes do not overlap, return . Otherwise return a ^]; containing only the points common to both argument boxes. ]^_`abcdef ]^_`abcdef ]^_^_`abcdef gA hg9 is a 2D bounding box (aligned to the coordinate axies). hijklm2Return the X-range that this bounding box covers. n2Return the Y-range that this bounding box covers. oAGiven ranges for each coordinate axis, construct a bounding box. ppGiven a pair of corner points, construct a bounding box. (The points must be from opposite corners, but it doesn' t matter which- corners nor which order they are given in.) qQFind the bounds of a list of points. (Throws an exception if the list is empty.) r<Test whether a given 2D vector is inside this bounding box. scReturn the minimum values for both coordinates. (In usual 2D space, the bottom-left corner point.) taReturn the maximum values for both coordinates. (In usual 2D space, the top-right corner point.) uTake the union of two bounding boxes. The result is a new bounding box that contains all the points the original boxes contained, plus any extra space between them. vQTake the intersection of two bounding boxes. If the boxes do not overlap, return `. Otherwise return a new bounding box containing only the points common to both argument boxes. ghijklmnopqrstuvghijklmnopqrstuvghijklhijklmnopqrstuv wA xw9 is a 3D bounding box (aligned to the coordinate axies). xyz{|}~2Return the X-range that this bounding box covers. 2Return the Y-range that this bounding box covers. 2Return the Z-range that this bounding box covers. AGiven ranges for each coordinate axis, construct a bounding box. pGiven a pair of corner points, construct a bounding box. (The points must be from opposite corners, but it doesn' t matter which- corners nor which order they are given in.) QFind the bounds of a list of points. (Throws an exception if the list is empty.) <Test whether a given 3D vector is inside this bounding box. /Return the minimum values for all coordinates. /Return the maximum values for all coordinates. Take the union of two bounding boxes. The result is a new bounding box that contains all the points the original boxes contained, plus any extra space between them. QTake the intersection of two bounding boxes. If the boxes do not overlap, return `. Otherwise return a new bounding box containing only the points common to both argument boxes. wxyz{|}~wxyz{|}~wxyz{|}~xyz{|}~A 9 is a 4D bounding box (aligned to the coordinate axies). 2Return the X-range that this bounding box covers. 2Return the Y-range that this bounding box covers. 2Return the Z-range that this bounding box covers. CReturn the W-range (4th coordinate) that this bounding box covers. AGiven ranges for each coordinate axis, construct a bounding box. pGiven a pair of corner points, construct a bounding box. (The points must be from opposite corners, but it doesn' t matter which- corners nor which order they are given in.) QFind the bounds of a list of points. (Throws an exception if the list is empty.) <Test whether a given 4D vector is inside this bounding box. /Return the minimum values for all coordinates. /Return the maximum values for all coordinates. Take the union of two bounding boxes. The result is a new bounding box that contains all the points the original boxes contained, plus any extra space between them. QTake the intersection of two bounding boxes. If the boxes do not overlap, return `. Otherwise return a new bounding box containing only the points common to both argument boxes.   !!"#$%&&'()*++,-.//01234567789:;<=>?@ABCD E E F G H I J K L M N O P Q R S T U V W X Y Z [ [ \ ] ^ _ ` a b c c d ^ _ ` \ ] a b e e f g h i j k l ^ _ ` \ ] a b m m f g n h i o j k p q ^ _ ` \ ] a brrfgnshiotjkpuv^_`\]abwxyzAC-Vector-2.2.0Data.Vector.ClassData.Vector.V1Data.Vector.V2Data.Vector.V3Data.Vector.V4Data.Vector.Transform.T1Data.Vector.Transform.T2Data.Vector.Transform.T3Data.Vector.Transform.T4Data.BoundingBox.RangeData.BoundingBox.B1Data.BoundingBox.B2Data.BoundingBox.B3Data.BoundingBox.B4VectorvmapvzipvfoldvpackvunpackScalar*||*vdotvmag vnormalisevlinearVector1v1xVector2v2xv2yVector3v3xv3yv3zvcrossVector4v4xv4yv4zv4w Transform1t1_XXt1_1X transformP1 Transform2t2_XXt2_YXt2_1Xt2_XYt2_YYt2_1Y transformP2 Transform3t3_XXt3_YXt3_ZXt3_1Xt3_XYt3_YYt3_ZYt3_1Yt3_XZt3_YZt3_ZZt3_1Z transformP3 Transform4t4_XXt4_YXt4_ZXt4_WXt4_1Xt4_XYt4_YYt4_ZYt4_WYt4_1Yt4_XZt4_YZt4_ZZt4_WZt4_1Zt4_XWt4_YWt4_ZWt4_WWt4_1W transformP4Range min_point max_point bound_corners bound_points within_boundsunionisectBBox1rangeBBox2minXminYmaxXmaxYrangeXrangeYrangeXYBBox3minZmaxZrangeZrangeXYZBBox4minWmaxWrangeW rangeXYZWbase Data.MaybeNothing