cpi      !"#$%&'()*+,-./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 portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred Compute the sum of two vectors V2 1 2 ^+^ V2 3 4V2 4 6!Compute the negation of a vector gnegate (V2 2 4) V2 (-2) (-4)+Compute the difference between two vectors V2 4 5 - V2 3 1V2 1 4 Compute the left scalar product  2 *^ V2 3 4V2 6 8!Compute the right scalar product  V2 3 4 ^* 2V2 6 8+Compute division by a scalar on the right. *Linearly interpolate between two vectors. BProduce a default basis for a vector space. If the dimensionality 2 of the vector space is not statically known, see . :Produce a default basis for a vector space from which the  argument is drawn. i   iportable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred EProvides a fairly subjective test to see if a quantity is near zero. nearZero (1e-11 :: Double)FalsenearZero (1e-17 :: Double)TruenearZero (1e-5 :: Float)FalsenearZero (1e-7 :: Float)True &Determine if a quantity is near zero. j k a l 1e-12m k a l 1e-6 jm    jm non-portable experimentalEdward Kmett <ekmett@gmail.com> 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. V2 1 2 `dot` V2 3 411 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.       non-portable experimentalEdward Kmett <ekmett@gmail.com> Safe-InferredA n f+ is corepresentable if it is isomorphic to (x -> a) E for some x. Nearly all such functors can be represented by choosing x to be ? the set of lenses that are polymorphic in the contents of the n,  that is to say x = Rep f is a valid choice of x for (nearly) every   Representable n.  non-portable experimentalEdward Kmett <ekmett@gmail.com>None6A space that distinguishes 2 orthogonal basis vectors  and , but may have more.  V2 1 2 ^._x1V2 1 2 & _x .~ 3V2 3 2 V2 1 2 ^._y2V2 1 2 & _y .~ 3V2 1 3A 2-dimensional vector pure 1 :: V2 IntV2 1 1V2 1 2 + V2 3 4V2 4 6V2 1 2 * V2 3 4V2 3 8 sum (V2 1 2)3+the counter-clockwise perpendicular vector perp $ V2 10 20 V2 (-20) 10opqrstuvwxyz{|opqrstuvwxyz{| non-portable experimentalEdward Kmett <ekmett@gmail.com>None7A space that distinguishes 3 orthogonal basis vectors: , , and . (It may have more) A 3-dimensional vector !cross product "scalar triple product  !"}~  !"  !" !"}~ non-portable experimentalEdward Kmett <ekmett@gmail.com>None#4A 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. #$%&'()#$%&'()&'()#$%#$%&'() non-portable experimentalEdward Kmett <ekmett@gmail.com>None*8Plcker coordinates for lines in a 3-dimensional space. ,[Given a pair of points represented by homogeneous coordinates generate Plcker coordinates  for the line through them. -OThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). .OThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). /OThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 0OThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 1OThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 2OThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 3ZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 4ZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 5ZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 6ZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 7ZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 8ZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). 9Valid Plcker coordinates p will have 9 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) !*+,-./0123456789:;<*+,-./0123456789:;<*+9;:,<-./327480516 *+,-./0123456789:;<  non-portable experimentalEdward Kmett <ekmett@gmail.com> Safe-Inferred=An involutive ring ><Conjugate a value. This defaults to the trivial involution. conjugate (1 :+ 2) 1.0 :+ (-2.0) conjugate 11=>=>=>=>  non-portable experimentalEdward Kmett <ekmett@gmail.com>None?0A vector space that includes the basis elements D, E, @ and A C0A vector space that includes the basis elements D and E F Quaternions %quadrance of the imaginary component H norm of the imaginary component Iraise a F to a scalar power 1Helper for calculating with specific branch cuts 1Helper for calculating with specific branch cuts J with a specified branch cut. K with a specified branch cut. L with a specified branch cut. M with a specified branch cut. N with a specified branch cut. O with a specified branch cut. P8Spherical linear interpolation between two quaternions. QApply a rotation to a vector. RR axis theta builds a F representing a  rotation of theta radians about axis. +?@ABCDEFGHIJKLMNOPQR?@ABCDEFGHIJKLMNOPQRFGCDE?@ABPJKLMNOHIQR%?@ABCDEFGHIJKLMNOPQR  non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneS+A 4x3 matrix with row-major representation T+A 4x4 matrix with row-major representation U+A 3x3 matrix with row-major representation V+A 2x2 matrix with row-major representation WMatrix product :V2 (V3 1 2 3) (V3 4 5 6) !*! V3 (V2 1 2) (V2 3 4) (V2 4 5)V2 (V2 19 25) (V2 43 58)XMatrix * column vector $V2 (V3 1 2 3) (V3 4 5 6) !* V3 7 8 9 V2 50 122YRow vector * matrix "V2 1 2 *! V2 (V3 3 4 5) (V3 6 7 8) V3 15 18 21ZScalar-matrix product 5 *!! V2 (V2 1 2) (V2 3 4)V2 (V2 5 10) (V2 15 20)[Matrix-scalar product V2 (V2 1 2) (V2 3 4) !!* 5V2 (V2 5 10) (V2 15 20)\+Hermitian conjugate or conjugate transpose :adjoint (V2 (V2 (1 :+ 2) (3 :+ 4)) (V2 (5 :+ 6) (7 :+ 8)))LV2 (V2 (1.0 :+ (-2.0)) (5.0 :+ (-6.0))) (V2 (3.0 :+ (-4.0)) (7.0 :+ (-8.0)))]Compute the trace of a matrix trace (V2 (V2 a b) (V2 c d))a + d^$Build a rotation matrix from a unit F. _=Build a transformation matrix from a rotation expressed as a  F and a translation vector. `AConvert from a 4x3 matrix to a 4x4 matrix, extending it with the  [ 0 0 0 1 ] column vector a8Convert a 3x3 matrix to a 4x4 matrix extending it with 0's in the new row and column. b3x3 identity matrix. eye3#V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1)c4x4 identity matrix. eye46V4 (V4 1 0 0 0) (V4 0 1 0 0) (V4 0 0 1 0) (V4 0 0 0 1)d@Extract the translation vector (first three entries of the last " column) from a 3x4 or 4x4 matrix e2x2 matrix determinant. det22 (V2 (V2 a b) (V2 c d)) a * d - b * cf3x3 matrix determinant. +det33 (V3 (V3 a b c) (V3 d e f) (V3 g h i))?a * (e * i - f * h) - d * (b * i - c * h) + g * (b * f - c * e)g2x2 matrix inverse. inv22 $ V2 (V2 1 2) (V2 3 4))Just (V2 (V2 (-2.0) 1.0) (V2 1.5 (-0.5)))h3x3 matrix inverse. +inv33 $ V3 (V3 1 2 4) (V3 4 2 2) (V3 1 1 1)JJust (V3 (V3 0.0 0.5 (-1.0)) (V3 (-0.5) (-0.75) 3.5) (V3 0.5 0.25 (-1.5)))STUVWXYZ[\]^_`abcdefghSTUVWXYZ[\]^_`abcdefghWXY[Z\VUTSa`efghbc]d^_STUVWXYZ[\]^_`abcdefgh  non-portable experimentalEdward Kmett <ekmett@gmail.com>Nonei  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh  !"#$%&&'()*++,-./011234456789:;<=>?@ABCDE F G H I J K L M N O 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 pqrstuvwxysz{|}~vw ssssss linear-0.6.1 Linear.VectorLinear.Epsilon Linear.Metric Linear.Core Linear.V2 Linear.V3 Linear.V4Linear.PluckerLinear.ConjugateLinear.Quaternion Linear.MatrixLinear^+^gnegate^-^*^^*^/lerpbasisbasisForEpsilonnearZeroMetricdot quadranceqddistancenormsignorm normalizeCorecoreR2_x_y_xyV2perpR3_z_xyzV3crosstripleR4_w_xyzwV4vectorpointPluckerpluckerp01p02p03p23p31p12p10p20p30p32p13p21 squaredError>< isotropic intersects Conjugate conjugate Hamiltonian_j_k_ijk Complicated_e_i Quaternionabsipowasinqacosqatanqasinhqacoshqatanhqslerprotate axisAngleM43M44M33M22!*!!**!*!!!!*adjointtracefromQuaternionmkTransformation m43_to_m44 m33_to_m44eye3eye4 translationdet22det33inv22inv33 setElement$fEpsilonDoublebaseGHC.Numabsghc-prim GHC.Classes<=$fEpsilonFloatGHC.BaseFunctor$fIxV2 $fStorableV2 $fEpsilonV2$fDistributiveV2$fCoreV2$fR2V2 $fMetricV2$fFractionalV2$fNumV2 $fMonadV2$fApplicativeV2$fTraversableV2 $fFoldableV2 $fFunctorV2$fIxV3 $fEpsilonV3 $fStorableV3$fCoreV3$fR3V3$fR2V3$fDistributiveV3 $fMetricV3$fFractionalV3$fNumV3 $fMonadV3$fApplicativeV3$fTraversableV3 $fFoldableV3 $fFunctorV3$fIxV4 $fEpsilonV4 $fStorableV4$fCoreV4$fR4V4$fR3V4$fR2V4$fDistributiveV4 $fMetricV4$fFractionalV4$fNumV4 $fMonadV4$fApplicativeV4$fTraversableV4 $fFoldableV4 $fFunctorV4==anti$fEpsilonPlucker$fMetricPlucker$fStorablePlucker$fFractionalPlucker $fNumPlucker $fIxPlucker$fTraversablePlucker$fFoldablePlucker $fCorePlucker$fDistributivePlucker$fMonadPlucker$fApplicativePlucker$fFunctorPlucker$fConjugateComplex$fConjugateFloat$fConjugateDouble$fConjugateWord8$fConjugateWord16$fConjugateWord32$fConjugateWord64$fConjugateWord$fConjugateInt8$fConjugateInt16$fConjugateInt32$fConjugateInt64$fConjugateInt$fConjugateIntegerqicutcutWith GHC.FloatasinacosatanasinhacoshatanhqNaN reimagine$fEpsilonQuaternion$fFloatingQuaternion$fConjugateQuaternion$fDistributiveQuaternion$fHamiltonianQuaternion$fComplicatedQuaternion$fComplicatedComplex$fMetricQuaternion$fFractionalQuaternion$fNumQuaternion$fStorableQuaternion$fTraversableQuaternion$fFoldableQuaternion$fCoreQuaternion$fIxQuaternion$fMonadQuaternion$fApplicativeQuaternion$fFunctorQuaternionmkTransformationMat