!"#$%&'()*+,-./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 { | } ~  hDummy class that enables you to request a vector in a type signature without needing to explicitly list  or  as well. 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.)  Convert a - to a vector (with all components the same). !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. 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). *+,-./01BApply a 2D transformation to a 2D point, yielding a new 2D point. )*+,-./01 )*+,-./01 )*+,-./0*+,-./012'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). 3456789:;<=>?@BApply a 3D transformation to a 3D point, yielding a new 3D point. 23456789:;<=>?@23456789:;<=>?@2 3456789:;<=>?3456789:;<=>?@ A'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). BCDEFGHIJKLMNOPQRSTUVWBApply a 4D transformation to a 4D point, yielding a new 4D point. ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUVBCDEFGHIJKLMNOPQRSTUVW XA YX. represents a continuous interval between two  endpoints. YZ[\ Given two s, construct a YXM (swapping the endpoints if necessary so that they are in the correct order. ]QFind the bounds of a list of points. (Throws an exception if the list is empty.) ^Test whether a given  falls within a particular YX. _,Take the union of two ranges. The resulting YXq 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 YXB is returned that contains only the points common to both ranges. a3Efficiently compute the union of a list of ranges. XYZ[\]^_`a XYZ[\]^_`a XYZ[YZ[\]^_`a bThe cb type is basically a Range+, 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 Range. cdeSGiven two vectors, construct a bounding box (swapping the endpoints if necessary). fQFind the bounds of a list of points. (Throws an exception if the list is empty.) gTest whether a  lies within a cb. h"Return the minimum endpoint for a cb. i"Return the maximum endpoint for a cb. jTake the union of two cb values. The result is a new cb_ that contains all the points the original boxes contained, plus any extra space between them. kTake the intersection of two cb- values. If the boxes do not overlap, return . Otherwise return a cb; containing only the points common to both argument boxes. l;Efficiently compute the union of a list of bounding boxes. bcdefghijkl bcdefghijkl bcdcdefghijkl mA nm9 is a 2D bounding box (aligned to the coordinate axies). nopqrs2Return the X-range that this bounding box covers. t2Return the Y-range that this bounding box covers. uAGiven ranges for each coordinate axis, construct a bounding box. vpGiven 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.) wQFind the bounds of a list of points. (Throws an exception if the list is empty.) x<Test whether a given 2D vector is inside this bounding box. ycReturn the minimum values for both coordinates. (In usual 2D space, the bottom-left corner point.) zaReturn the maximum values for both coordinates. (In usual 2D space, the top-right corner point.) {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. };Efficiently compute the union of a list of bounding boxes. mnopqrstuvwxyz{|}mnopqrstuvwxyz{|}mnopqrnopqrstuvwxyz{|} ~A ~9 is a 3D 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. 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. ;Efficiently compute the union of a list of bounding boxes. ~~~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. ;Efficiently compute the union of a list of bounding boxes.    !""#$%%&'()**+,-.//01233456789:;;<=>?@ABCDEFGH I 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 h i b c d ` a e f g j j k l m n o p q b c d ` a e f g r r k l s m n t o p u v b c d ` a e f gwwklsxmntyopuz{bcd`aefg|}~||AC-Vector-2.3.1Data.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.B4Vector BasicVectorvmapvzipvfoldvpackvunpackvpromoteScalar*||*|//|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_boundsunionisectunionsBBox1rangeBBox2minXminYmaxXmaxYrangeXrangeYrangeXYBBox3minZmaxZrangeZrangeXYZBBox4minWmaxWrangeW rangeXYZWbaseGHC.NumNumGHC.Real Fractional Data.MaybeNothing