úÎUÇLµR      !"#$%&'()*+,-./ 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredCompute the sum of two vectors !Compute the negation of a vector +Compute the difference between two vectors  Compute the left scalar product !Compute the right scalar product +Compute division by a scalar on the right. *Linearly interpolate between two vectors. portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredEProvides a fairly subjective test to see if a quantity is near zero. &Determine if a quantity is near zero. R S a T 1e-12U S a T 1e-6RURU Safe-Inferred A free inner product/ metric space ;Compute the inner product of two vectors or (equivalently)  convert a vector f a into a covector f a -> a. 9Compute the squared norm. The name quadrance arises from  Norman J. Wildberger's rational trigonometry. (Compute the quadrance of the difference ;Compute the distance between two vectors in a metric space /Compute the norm of a vector in a metric space *Convert a non-zero vector to unit vector.  Normalize a   functor to have unit . This function $ does not change the functor if its  is 0 or 1.      None6A space that distinguishes 2 orthogonal basis vectors  and , but may have more. A 2-dimensional vector +the counter-clockwise perpendicular vector VWXYZ[\]^_`abVWXYZ[\]^_`abNone7A space that distinguishes 3 orthogonal basis vectors: , , and . (It may have more) A 3-dimensional vector cross product scalar triple product cdefghijklmnop  cdefghijklmnopNone4A space that distinguishes orthogonal basis vectors , , ,  . (It may have more.) "A 4-dimensional vector. $OConvert a 3-dimensional affine vector into a 4-dimensional homogeneous vector. %NConvert a 3-dimensional affine point into a 4-dimensional homogeneous vector.  !"#$%qrstuvwxyz{|}~ !"#$%"#$% ! !"#$%qrstuvwxyz{|}~None &8Plücker coordinates for lines in a 3-dimensional space. ([Given a pair of points represented by homogeneous coordinates generate Plücker coordinates  for the line through them. €OThese elements form a basis for the Plücker space, or the Grassmanian manifold Gr(2,V4). OThese elements form a basis for the Plücker space, or the Grassmanian manifold Gr(2,V4). ‚OThese elements form a basis for the Plücker space, or the Grassmanian manifold Gr(2,V4). ƒOThese elements form a basis for the Plücker space, or the Grassmanian manifold Gr(2,V4). „OThese elements form a basis for the Plücker space, or the Grassmanian manifold Gr(2,V4). …OThese elements form a basis for the Plücker space, or the Grassmanian manifold Gr(2,V4). )Valid Plücker coordinates p will have ) p † 0 PThat said, floating point makes a mockery of this claim, so you may want to use . *This isn'Yt th actual metric because this bilinear form gives rise to an isotropic quadratic space +rChecks if the line is near-isotropic (isotropic vectors in this quadratic space represent lines in real 3d space) ,:Checks if the two vectors intersect (or nearly intersect) &'(€‚ƒ„…)*+,‡ˆ‰Š‹Œ‘&'()*+,&')+*(,&'(€‚ƒ„…)*+,‡ˆ‰Š‹Œ‘ Safe-Inferred-An involutive ring .<Conjugate a value. This defaults to the trivial involution. -.’“”-.-.-.’“” None•%quadrance of the imaginary component 8 norm of the imaginary component 9raise a 6 to a scalar power –1Helper for calculating with specific branch cuts —1Helper for calculating with specific branch cuts :˜ with a specified branch cut. ;™ with a specified branch cut. <š with a specified branch cut. =› with a specified branch cut. >œ with a specified branch cut. ? with a specified branch cut. @8Spherical linear interpolation between two quaternions. AApply a rotation to a vector. BB axis theta builds a 6 representing a  rotation of theta radians about axis. */01234567Ÿ•89–—:;<=>?@AB ¡¢£¤¥¦§¨©ª«¬­®¯°/0123456789:;<=>?@AB67345/012@:;<=>?89AB$/01234567Ÿ•89–—:;<=>?@AB ¡¢£¤¥¦§¨©ª«¬­®¯° None E)Matrices use a row-major representation. Fmatrix product Gmatrix * column vector Hrow vector * matrix I+hermitian conjugate or conjugate transpose JCompute the trace of a matrix KBuild a rotation matrix from a 6. L=Build a transformation matrix from a rotation expressed as a  6 and a translation vector. O3x3 identity matrix. P4x4 identity matrix. Q@Extract the translation vector (first three entries of the last " column) from a 3x4 or 4x4 matrix CDEFGHIJK±LMNOPQCDEFGHIJKLMNOPQFGHIEDCNMOPJQKLCDEFGHIJK±LMNOPQ²     !"#$%%&'()*++,-../012345 6 7 8 9 : ; < = = > ? @ A B C D E F G H I J K L M N O P Q R S T U V WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ\]‘’“”•–—˜™š›œ Ÿ   ¡Y¢£Y¢¤Y¢¥Y¢¦Y¢§Y¢¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼½linear-0.2.0.2 Linear.VectorLinear.Epsilon Linear.Metric Linear.V2 Linear.V3 Linear.V4Linear.PluckerLinear.ConjugateLinear.Quaternion Linear.Matrix^+^gnegate^-^*^^*^/lerpEpsilonnearZeroMetricdot quadranceqddistancenormsignorm normalizeR2_x_y_xyV2perpR3_z_xyzV3crosstripleR4_w_xyzwV4vectorpointPluckerplucker squaredError>< isotropic intersects Conjugate conjugate Hamiltonian_j_k_ijk Complicated_e_i Quaternionabsipowasinqacosqatanqasinhqacoshqatanhqslerprotate axisAngleM43M44M33!*!!**!adjointtracefromQuaternionmkTransformation m43_to_m44 m33_to_m44eye3eye4 translation$fEpsilonDoublebaseGHC.Numabsghc-prim GHC.Classes<=$fEpsilonFloat $fStorableV2 $fEpsilonV2$fDistributiveV2$fRepresentableV2$fR2V2 $fMetricV2$fFractionalV2$fNumV2 $fMonadV2$fApplicativeV2$fTraversableV2 $fFoldableV2 $fFunctorV2 $fEpsilonV3 $fStorableV3$fRepresentableV3$fR3V3$fR2V3$fDistributiveV3 $fMetricV3$fFractionalV3$fNumV3 $fMonadV3$fApplicativeV3$fTraversableV3 $fFoldableV3 $fFunctorV3 $fEpsilonV4 $fStorableV4$fRepresentableV4$fR4V4$fR3V4$fR2V4$fDistributiveV4 $fMetricV4$fFractionalV4$fNumV4 $fMonadV4$fApplicativeV4$fTraversableV4 $fFoldableV4 $fFunctorV4p01p02p03p23p31p12==$fEpsilonPlucker$fMetricPlucker$fFractionalPlucker $fNumPlucker$fTraversablePlucker$fFoldablePlucker$fRepresentablePlucker$fDistributivePlucker$fMonadPlucker$fApplicativePlucker$fFunctorPlucker$fConjugateComplex$fConjugateFloat$fConjugateDoubleqicutcutWith GHC.FloatasinacosatanasinhacoshatanhqNaN reimagine$fEpsilonQuaternion$fFloatingQuaternion$fConjugateQuaternion$fDistributiveQuaternion$fHamiltonianQuaternion$fComplicatedQuaternion$fComplicatedComplex$fMetricQuaternion$fFractionalQuaternion$fNumQuaternion$fStorableQuaternion$fTraversableQuaternion$fFoldableQuaternion$fRepresentableQuaternion$fMonadQuaternion$fApplicativeQuaternion$fFunctorQuaternionmkTransformationMat