úÎ42;      Safe-Inferred:Three-dimensional vector, with an associated matrix type.  Associated type for 3×3 matrix.  Origin point  (0, 0, 0). (Construct a new vector from components. &Deconstruct a vector into components. Zip two vectors elementwise. Add two vectors. Subtract two vectors. Cross product. Scale a vector.  Dot product. Euclidean norm of a vector. <Produce unit vector with the same direction as the original  one. Distance between two points. "Invert the direction of a vector. "Construct a new matrix from rows.  Deconstruct a matrix into rows. Generic vector dot product. @Multiply the transpose of the first vector by the given matrix, 0 then multiply the result by the second vector.  % [ a11 a12 a13 ] [ v2x ] % [ ] [ ]  [ v1x v1y v1z ] . [ a21 a22 a23 ] . [ v2y ] = s % [ ] [ ] % [ a31 a32 a33 ] [ v2z ]  Multiply a matrix and a vector.   [ a11 a12 a13 ] [ v2x ] [ rx ]  [ ] [ ] [ ]  [ a21 a22 a23 ] . [ v2y ] = [ ry ]  [ ] [ ] [ ]  [ a31 a32 a33 ] [ v2z ] [ rz ] &Build a diagonal matrix from a number d.   [ d 0 0 ]  [ ]  [ 0 d 0 ]  [ ]  [ 0 0 d ] 6Transpose a vector and multiply it by another vector,  producing a matrix.   [ v1x ]' [ r11 r12 r13 ]  [ ]' [ ]  [ v1y ] . [ v2x v2y v2z ] = [ r21 r22 r23 ]  [ ]' [ ]  [ v1z ]' [ r31 r32 r33 ] Add two matrices.     None implementation with  instance,  suitable for use with Data.Vector.Storable. None implementation with  instance ( based on tuples, suitable for use with Data.Vector.Unboxed. CThis represents 3-vector as a triple of doubles, using the default * Unbox instance for tuples as provided by Data.Vector.Unboxed, 7 which wraps a vector of tuples as a tuple of vectors.  , interface: [d1 (x, y, z); d2 (x, y, z) ...] , length = N ( | | | | | | , storage(x): [d1x-+ | | ; d2x-+ | | ...] , length = N , storage(y): [d1y----+ | ; d2y----+ | ...] , length = N , storage(z): [d1z-------+ ; d2z-------+ ...] , length = N None implementation with  instance E based on a single contiguous array storage scheme, suitable for use  with Data.Vector.Unboxed. 7 instance provides the required index transformations.   . interface: [d1 x y z ; d2 x y z ...], length = N = M / 3 * | | | | | | . storage: [ d1x d2y d2z ; d2x d2y d2z ...] , length = M 7Thanks to dense packing scheme the performance of this 0 implementation should generally be on par with Storable-based    .  !"# !"# None  $      !!""#$%&'()*+,simple-vec3-0.1.0.0Data.Vec3.ClassData.Vec3.StorableData.Vec3.TUnboxedData.Vec3.UnboxedForeign.StorableStorableData.Vector.UnboxedUnbox Data.Vec3SVec3Vec3MatrixoriginfromXYZtoXYZzipWith<+><->><.^.*norm normalizedistanceinvertfromRowstoRowsdotMmxvdiagvxvaddMTUVec3UVec3 $fVec3SVec3$fStorableSVec3 $fVec3TUVec3vector-0.10.0.1Data.Vector.Unboxed.Base $fUnboxUVec3$fVectorVectorUVec3$fMVectorMVectorUVec3 $fVec3UVec3