F%!      !"#$%&'()*+,-./01234567 8 9 : ; < = > ? @ 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 fghijklmno p q r s t u v w x y z { | } ~  (C) 2012 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Trustworthy (C) 2012 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Trustworthy 13=HJKM8A vector is an additive group with additional structure.The zero vectorCompute the sum of two vectorsV2 1 2 ^+^ V2 3 4V2 4 6*Compute the difference between two vectorsV2 4 5 - V2 3 1V2 1 4)Linearly interpolate between two vectors.Apply a function to merge the  'non-zero'< components of two vectors, unioning the rest of the values.)For a dense vector this is equivalent to .*For a sparse vector this is equivalent to .2Apply a function to the components of two vectors.)For a dense vector this is equivalent to .*For a sparse vector this is equivalent to . Basis element  Compute the negation of a vectornegated (V2 2 4) V2 (-2) (-4) Sum over multiple vectorssumV [V2 1 1, V2 3 4]V2 4 5 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.tProduce a default basis for a vector space. If the dimensionality of the vector space is not statically known, see .MProduce a default basis for a vector space from which the argument is drawn.(Produce a diagonal matrix from a vector.Create a unit vector.unit _x :: V2 IntV2 1 0%Outer (tensor) product of two vectors.                  (C) 2012 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Safe-InferredDProvides 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.  a  1e-12  a  1e-6  a  1e-12  a  1e-6(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy1 ,Free and sparse inner product/metric spaces.MCompute 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 411gCompute 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 4. This function does not change the functor if its  is 0 or 1. project u v computes the projection of v onto u.  (C) 2012-2013 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy +0246=KM A 0-dimensional vectorpure 1 :: V0 IntV0V0 + V0V0" ! !"#$%&'()*+,-./0123456789 ! ! ! !"#$%&'()*+,-./0123456789(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy+-./0246=BKM")A space that has at least 1 basis vector #.# V1 2 ^._x2V1 2 & _x .~ 3V1 3$A 1-dimensional vectorpure 1 :: V1 IntV1 1 V1 2 + V1 3V1 5 V1 2 * V1 3V1 6 sum (V1 2)2%"#$%:;&<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY"#$%&$%"#&!"#$%&<=>?@A:B;CDEFGHIJKLMNOPQRSTUVWXY(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy +0246=KM'6A space that distinguishes 2 orthogonal basis vectors # and (, but may have more.( V2 1 2 ^._y2V2 1 2 & _y .~ 3V2 1 3 ( :: Z (t a) a ) ) :: Z (t a) (* a) *A 2-dimensional vectorpure 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 vectorperp $ V2 10 20 V2 (-20) 10-'()*+[\,-.]^_`abcdefghijklmnopqrstuvwxyz{|}~ "#&'()*+,-. *+"#'()&,-.('()*+,-.]^_`ab[c\defghijklmnopqrstuvwxyz{|}~(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy +0246=KM/7A space that distinguishes 3 orthogonal basis vectors: #, (, and 0. (It may have more)0 0 :: Z (t a) a 1 1 :: Z (t a) (2 a) 2A 3-dimensional vector5 cross product6scalar triple product./0123456"#&'(),/01234562356"#'()/01&,4)/0123456 (C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy +0246=KM74A space that distinguishes orthogonal basis vectors #, (, 0, 8. (It may have more.)8 8 :: Z (t a) a 9 9 :: Z (t a) (: a) :A 4-dimensional vector.=NConvert a 3-dimensional affine vector into a 4-dimensional homogeneous vector.>MConvert a 3-dimensional affine point into a 4-dimensional homogeneous vector.?gConvert 4-dimensional projective coordinates to a 3-dimensional point. This operation may be denoted, &euclidean [x:y:z:w] = (x/w, y/w, z/w)/ where the projective, homogenous, coordinate  [x:y:z:w]/ is one of many associated with a single point (x/w, y/w, z/w).0789:;<=>?"#&'(),/014789:;<=>?:;=>?"#'()/01789&,4<+789:;<=>? (C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy !"0246=KM @When lines are represented as Plcker coordinates, we have the ability to check for both directed and undirected equality. Undirected equality between Bs (or a B and a AR) checks that the two lines coincide in 3D space. Directed equality, between two As, checks that two lines coincide in 3D, and have the same direction. To accomodate these two notions of equality, we use an  instance on the @ data type.For example, to check the directed equality between two lines, p1 and p2 , we write, Ray p1 == Ray p2.C'Describe how two lines pass each other.D@The lines pass each other counterclockwise (left-handed screw).E9The lines pass each other clockwise (right-handed screw)F2The lines are coplanar (parallel or intersecting).G7Plcker coordinates for lines in a 3-dimensional space.IGiven a pair of points represented by homogeneous coordinates generate Plcker coordinates for the line through them, directed from the second towards the first.JGiven a pair of 3D points, generate Plcker coordinates for the line through them, directed from the second towards the first.KOThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). K :: Z (G a) a L :: Z (G a) a M :: Z (G a) a N :: Z (G a) a O :: Z (G a) a P :: Z (G a) a LOThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). K :: Z (G a) a L :: Z (G a) a M :: Z (G a) a N :: Z (G a) a O :: Z (G a) a P :: Z (G a) a MOThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). K :: Z (G a) a L :: Z (G a) a M :: Z (G a) a N :: Z (G a) a O :: Z (G a) a P :: Z (G a) a NOThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). K :: Z (G a) a L :: Z (G a) a M :: Z (G a) a N :: Z (G a) a O :: Z (G a) a P :: Z (G a) a OOThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). K :: Z (G a) a L :: Z (G a) a M :: Z (G a) a N :: Z (G a) a O :: Z (G a) a P :: Z (G a) a POThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). K :: Z (G a) a L :: Z (G a) a M :: Z (G a) a N :: Z (G a) a O :: Z (G a) a P :: Z (G a) a QZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). Q ::  a => Z (G a) a R ::  a => Z (G a) a S ::  a => Z (G a) a T ::  a => Z (G a) a U ::  a => Z (G a) a V ::  a => Z (G a) a RZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). Q ::  a => Z (G a) a R ::  a => Z (G a) a S ::  a => Z (G a) a T ::  a => Z (G a) a U ::  a => Z (G a) a V ::  a => Z (G a) a SZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). Q ::  a => Z (G a) a R ::  a => Z (G a) a S ::  a => Z (G a) a T ::  a => Z (G a) a U ::  a => Z (G a) a V ::  a => Z (G a) a TZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). Q ::  a => Z (G a) a R ::  a => Z (G a) a S ::  a => Z (G a) a T ::  a => Z (G a) a U ::  a => Z (G a) a V ::  a => Z (G a) a UZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). Q ::  a => Z (G a) a R ::  a => Z (G a) a S ::  a => Z (G a) a T ::  a => Z (G a) a U ::  a => Z (G a) a V ::  a => Z (G a) a VZThese elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). Q ::  a => Z (G a) a R ::  a => Z (G a) a S ::  a => Z (G a) a T ::  a => Z (G a) a U ::  a => Z (G a) a V ::  a => Z (G a) a ]Valid Plcker coordinates p will have ] p  0PThat said, floating point makes a mockery of this claim, so you may want to use .^aThis isn't th actual metric because this bilinear form gives rise to an isotropic quadratic space_sChecks if the line is near-isotropic (isotropic vectors in this quadratic space represent lines in real 3d space).`4Checks if two lines intersect (or nearly intersect).a%Check how two lines pass each other.  passes l1 l2 describes l2 when looking down l1.b!Checks if two lines are parallel.QRepresent a Plcker coordinate as a pair of 3-tuples, typically denoted U and V.KChecks if two lines coincide in space. In other words, undirected equality.FChecks if two lines coincide in space, and have the same orientation.c7The minimum squared distance of a line from the origin.d0The point where a line is closest to the origin.eNot all 6-dimensional points correspond to a line in 3D. This predicate tests that a Plcker coordinate lies on the Grassmann manifold, and does indeed represent a 3D line.N@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde&@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde&GH]_^IJb`CFEDacde@BAKLMQPURVNSOTWXY\[ZF@BACFEDGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde^(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy'(02346<=>BHKM#fghijklmn      fghijklmn fghkijlmn fghijklmn      (C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Safe-Inferred1o4Requires and provides a default definition such that q =  pAn involutive ringq;Conjugate a value. This defaults to the trivial involution.conjugate (1 :+ 2) 1.0 :+ (-2.0) conjugate 11"opq !"#$%&'()*+,-./01opqpqo!opq !"#$%&'()*+,-./01 (C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy +0246=FKMr0A vector space that includes the basis elements w, x, s and tv0A vector space that includes the basis elements w and xy Quaternions2$quadrance of the imaginary componentnorm of the imaginary componentraise a y to a scalar power30Helper for calculating with specific branch cuts40Helper for calculating with specific branch cuts5 with a specified branch cut.6 with a specified branch cut.7 with a specified branch cut.8 with a specified branch cut.9 with a specified branch cut.: with a specified branch cut.7Spherical linear interpolation between two quaternions.Apply a rotation to a vector. axis theta builds a y representing a rotation of theta radians about axis.Crstuvwxyz;<={|}~>234?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abrstuvwxyz{|}~yzvwxrstu{|}~;rstuvwxyz={|}~>234?@ABCD;E<FGHIJKLMNOPQRSTUVWXYZ[\]^_`ab (C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy1JKCompute the trace of a matrixtrace (V2 (V2 a b) (V2 c d))a + d Compute the diagonal of a matrixdiagonal (V2 (V2 a b) (V2 c d))V2 a dcdefghijklmnocdefghijklmno(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable TrustworthyHM*A 4x3 matrix with row-major representation*A 4x4 matrix with row-major representation*A 3x3 matrix with row-major representation*A 2x2 matrix with row-major representationThis is a generalization of p" to work over any corepresentable q.  :: r f => s s t a b -> s (f s) (f t) (f a) (f b) 6In practice it is used to access a column of a matrix.V2 (V3 1 2 3) (V3 4 5 6) ^._xV3 1 2 3$V2 (V3 1 2 3) (V3 4 5 6) ^.column _xV2 1 4TMatrix product. This can compute any combination of sparse and dense multiplication.: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)SV2 (fromList [(1,2)]) (fromList [(2,3)]) !*! fromList [(1,V3 0 0 1), (2, V3 0 0 5)]V2 (V3 0 0 2) (V3 0 0 15)Entry-wise matrix addition.5V2 (V3 1 2 3) (V3 4 5 6) !+! V2 (V3 7 8 9) (V3 1 2 3)V2 (V3 8 10 12) (V3 5 7 9)Entry-wise matrix subtraction.5V2 (V3 1 2 3) (V3 4 5 6) !-! V2 (V3 7 8 9) (V3 1 2 3)!V2 (V3 (-6) (-6) (-6)) (V3 3 3 3)Matrix * column vector$V2 (V3 1 2 3) (V3 4 5 6) !* V3 7 8 9 V2 50 122Row vector * matrix"V2 1 2 *! V2 (V3 3 4 5) (V3 6 7 8) V3 15 18 21Scalar-matrix product5 *!! V2 (V2 1 2) (V2 3 4)V2 (V2 5 10) (V2 15 20)Matrix-scalar productV2 (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)))$Build a rotation matrix from a unit y.OBuild a transformation matrix from a rotation matrix and a translation vector.>Build a transformation matrix from a rotation expressed as a y and a translation vector.AConvert from a 4x3 matrix to a 4x4 matrix, extending it with the  [ 0 0 0 1 ] column vectorUConvert a 3x3 matrix to a 4x4 matrix extending it with 0's in the new row and column.2x2 identity matrix.eye2V2 (V2 1 0) (V2 0 1)3x3 identity matrix.eye3#V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1)4x4 identity matrix.eye46V4 (V4 1 0 0 0) (V4 0 1 0 0) (V4 0 0 1 0) (V4 0 0 0 1)bExtract the translation vector (first three entries of the last column) from a 3x4 or 4x4 matrix.2x2 matrix determinant.det22 (V2 (V2 a b) (V2 c d)) a * d - b * c3x3 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)2x2 matrix inverse.inv22 $ V2 (V2 1 2) (V2 3 4))Just (V2 (V2 (-2.0) 1.0) (V2 1.5 (-0.5)))3x3 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)))(C) 2014 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Safe-InferredBuild a look at view matrix7Build a matrix for a symmetric perspective-view frustumTBuild a matrix for a symmetric perspective-view frustum with a far plane at infinite BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Trustworthy.02346=BHKM JA handy wrapper to help distinguish points from vectors at the type levelwAn affine space is roughly a vector space in which we have forgotten or at least pretend to have forgotten the origin. `a .+^ (b .-. a) = b@ (a .+^ u) .+^ v = a .+^ (u ^+^ v)@ (a .-. b) ^+^ v = (a .+^ v) .-. q@9Get the difference between two points as a vector offset.Add a vector offset to a point.&Subtract a vector offset from a point.DCompute the quadrance of the difference (the square of the distance).Distance between two points in an affine spaceVector spaces have origins.FAn isomorphism between points and vectors, given a reference point.-tu +(tu-(C) 2013-2014 Edward Kmett and Anthony Cowley BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Safe-InferredSerialize a linear type.Deserialize a linear type.None2346.A coassociative counital coalgebra over a ring)An associative unital algebra over a ringvwxyz{|}~ vwxyz{|}~None2346ILinear functionals from elements of an (infinite) free module to a scalar (C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portableNone  !"#$%&'()*+,-./0123456789:;<=>?opqrstuvwxyz{|}~  !"#$%&'()*+,-./01234567789::;<=>??@ABCDEFFGHI J K L M M N O P Q R S T U V W X Y Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u vwwxyz{|}~              !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                       #$!#$                                          !"#$%&'() * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J KLMLNLOLPLQLR 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 { | } ~         n(no linear-1.11.2Linear.V Linear.VectorLinear.Epsilon Linear.Metric Linear.V0 Linear.V1 Linear.V2 Linear.V3 Linear.V4Linear.PluckerLinear.ConjugateLinear.Quaternion Linear.Trace Linear.MatrixLinear.Perspective Linear.Affine Linear.BinaryLinear.AlgebraLinear.CovectorLinear.InstancesLinearreflection-1.5.2.1Data.ReflectionintAdditivezero^+^^-^lerpliftU2liftI2EelnegatedsumV*^^*^/basisbasisFor kroneckerunitouterEpsilonnearZeroMetricdot quadranceqddistancenormsignorm normalizeprojectV0R1_xV1exR2_y_xyV2eyperpangleR3_z_xyzV3ezcrosstripleR4_w_xyzwV4ewvectorpointnormalizePoint CoincidesRayLineLinePassCounterclockwise ClockwiseCoplanarPluckerplucker plucker3Dp01p02p03p23p31p12p10p20p30p32p13p21e01e02e03e23e31e12 squaredError>< isotropic intersectspassesparallelquadranceToOriginclosestToOriginisLineVtoVectorDim reflectDimdimreifyDim reifyVector fromVectorTrivialConjugate Conjugate conjugate Hamiltonian_j_k_ijk Complicated_e_i Quaternioneeeiejekabsipowasinqacosqatanqasinhqacoshqatanhqslerprotate axisAngleTracetracediagonalM43M44M33M22column!*!!+!!-!!**!*!!!!*adjointfromQuaternionmkTransformationMatmkTransformation m43_to_m44 m33_to_m44eye2eye3eye4 translationdet22det33inv22inv33lookAt perspectiveinfinitePerspectivePointPAffineDiff.-..+^.-^qdA distanceAlensP_Pointoriginrelative $fAffinePoint $fR4Point $fR3Point $fR2Point $fR1Point$fEachPointPointab $fIxedPoint$fRepresentablePoint$fDistributivePoint $fBindPoint$fWrappedPoint$fRewrappedPointt $fAffineV$fAffineHashMap $fAffineMap $fAffine(->)$fAffineQuaternion$fAffinePlucker $fAffineV4 $fAffineV3 $fAffineV2 $fAffineV1 $fAffineV0$fAffineVector$fAffineIdentity$fAffineIntMap $fAffineMaybe$fAffineZipList$fAffineComplex $fAffine[] putLinear getLinear CoalgebracomultcounitalAlgebramultunitalmultRep unitalRep comultRep counitalRepCovector runCovector$*$fTraversable1Complex$fFoldable1Complex$fTraversableComplex$fFoldableComplex$fMonadFixComplex$fMonadZipComplex$fMonadComplex $fBindComplex$fApplicativeComplex$fApplyComplex$fFunctorComplex $fBindHashMap$fApplyHashMapbaseControl.ApplicativeliftA2containers-0.5.5.1 Data.Map.Base unionWithintersectionWithSetOne_fillerchoices GAdditivegzerogliftU2gliftI2 fillFromList$fApplicativeSetOne$fFunctorSetOne$fAdditiveIdentity$fAdditiveComplex$fAdditive(->)$fAdditiveHashMap $fAdditiveMap$fAdditiveIntMap $fAdditive[]$fAdditiveMaybe$fAdditiveVector$fAdditiveZipList$fGAdditivePar1 $fGAdditiveM1$fGAdditiveRec1$fGAdditive:*: $fGAdditiveU1$fEpsilonCDoubleGHC.Numabsghc-prim GHC.Classes<=$fEpsilonCFloat$fEpsilonDouble$fEpsilonFloat$fMetricVector$fMetricHashMap $fMetricMap$fMetricIntMap$fMetricIdentityMV_V0V_V0 $fMonadFixV0 $fMonadZipV0$fVectorVectorV0$fMVectorMVectorV0 $fUnboxV0TFCo:R:MVectorsV0TFCo:R:VectorV0 $fEachV0V0ab$fIxedV0TFCo:R:IxValueV0TFCo:R:IndexV0$fRepresentableV0$fTraversableWithIndexEV0$fFoldableWithIndexEV0$fFunctorWithIndexEV0 $fStorableV0 $fEpsilonV0 $fHashableV0$fDistributiveV0 $fMetricV0$fFractionalV0$fNumV0 $fMonadV0$fBindV0 $fAdditiveV0$fApplicativeV0 $fApplyV0$fTraversableV0 $fFoldableV0 $fFunctorV0MV_V1V_V1 $fMonadFixV1 $fMonadZipV1$fVectorVectorV1$fMVectorMVectorV1 $fUnboxV1TFCo:R:MVectorsV1TFCo:R:VectorV1 $fEachV1V1ab$fIxedV1TFCo:R:IxValueV1TFCo:R:IndexV1$fTraversableWithIndexEV1$fFoldableWithIndexEV1$fFunctorWithIndexEV1$fRepresentableV1$fIxV1$fDistributiveV1 $fR1Identity$fR1V1 $fMetricV1 $fHashableV1$fFractionalV1$fNumV1 $fMonadV1$fBindV1 $fAdditiveV1$fApplicativeV1 $fApplyV1$fTraversable1V1 $fFoldable1V1 lens-4.9.1Control.Lens.TypeLens'MV_V2V_V2 $fMonadFixV2 $fMonadZipV2$fVectorVectorV2$fMVectorMVectorV2 $fUnboxV2TFCo:R:MVectorsV2TFCo:R:VectorV2 $fEachV2V2ab$fIxedV2TFCo:R:IxValueV2TFCo:R:IndexV2$fTraversableWithIndexEV2$fFoldableWithIndexEV2$fFunctorWithIndexEV2$fRepresentableV2$fIxV2 $fStorableV2 $fEpsilonV2$fDistributiveV2$fR2V2$fR1V2 $fMetricV2$fFractionalV2$fNumV2 $fMonadV2$fBindV2 $fAdditiveV2 $fHashableV2$fApplicativeV2 $fApplyV2$fTraversable1V2 $fFoldable1V2$fTraversableV2 $fFoldableV2 $fFunctorV2MV_V3V_V3 $fMonadFixV3 $fMonadZipV3$fVectorVectorV3$fMVectorMVectorV3 $fUnboxV3TFCo:R:MVectorsV3TFCo:R:VectorV3 $fEachV3V3ab$fIxedV3TFCo:R:IxValueV3TFCo:R:IndexV3$fTraversableWithIndexEV3$fFoldableWithIndexEV3$fFunctorWithIndexEV3$fRepresentableV3$fIxV3 $fEpsilonV3 $fStorableV3$fR3V3$fR2V3$fR1V3$fDistributiveV3 $fMetricV3 $fHashableV3$fFractionalV3$fNumV3 $fMonadV3$fBindV3 $fAdditiveV3$fApplicativeV3 $fApplyV3$fTraversable1V3 $fFoldable1V3$fTraversableV3 $fFoldableV3 $fFunctorV3MV_V4V_V4 $fMonadFixV4 $fMonadZipV4$fVectorVectorV4$fMVectorMVectorV4 $fUnboxV4TFCo:R:MVectorsV4TFCo:R:VectorV4 $fEachV4V4ab$fIxedV4TFCo:R:IxValueV4TFCo:R:IndexV4$fTraversableWithIndexEV4$fFoldableWithIndexEV4$fFunctorWithIndexEV4$fRepresentableV4$fIxV4 $fEpsilonV4 $fStorableV4$fR4V4$fR3V4$fR2V4$fR1V4 $fHashableV4$fDistributiveV4 $fMetricV4$fFractionalV4$fNumV4 $fMonadV4$fBindV4 $fAdditiveV4 $fApplyV4$fApplicativeV4$fTraversable1V4 $fFoldable1V4$fTraversableV4 $fFoldableV4 $fFunctorV4EqNum==toUV coincides coincides' MV_Plucker V_Pluckeranti$fMonadFixPlucker$fMonadZipPlucker$fVectorVectorPlucker$fMVectorMVectorPlucker$fUnboxPluckerTFCo:R:MVectorsPluckerTFCo:R:VectorPlucker $fEqCoincides$fEachPluckerPluckerab $fIxedPluckerTFCo:R:IxValuePluckerTFCo:R:IndexPlucker$fTraversableWithIndexEPlucker$fFoldableWithIndexEPlucker$fFunctorWithIndexEPlucker$fEpsilonPlucker$fMetricPlucker$fStorablePlucker$fHashablePlucker$fFractionalPlucker $fNumPlucker $fIxPlucker$fTraversable1Plucker$fFoldable1Plucker$fTraversablePlucker$fFoldablePlucker$fRepresentablePlucker$fDistributivePlucker$fMonadPlucker $fBindPlucker$fAdditivePlucker$fApplicativePlucker$fApplyPlucker$fFunctorPlucker ReifiedDimretagDim $fEachVVab $fMonadFixV $fMonadZipV$fIxedVTFCo:R:IxValueV TFCo:R:IndexV$fRepresentableV $fMetricV $fEpsilonV $fStorableV$fDistributiveV $fFractionalV$fNumV $fAdditiveV$fMonadV$fBindV$fApplicativeV$fApplyV$fTraversableV $fFoldableV $fFunctorV$fDim*V$fDim*ReifiedDim $fDimNatnGHC.Baseid$fTrivialConjugateCDouble$fTrivialConjugateCFloat$fTrivialConjugateFloat$fTrivialConjugateDouble$fTrivialConjugateWord8$fTrivialConjugateWord16$fTrivialConjugateWord32$fTrivialConjugateWord64$fTrivialConjugateWord$fTrivialConjugateInt8$fTrivialConjugateInt16$fTrivialConjugateInt32$fTrivialConjugateInt64$fTrivialConjugateInt$fTrivialConjugateInteger$fConjugateComplex$fConjugateCDouble$fConjugateCFloat$fConjugateFloat$fConjugateDouble$fConjugateWord8$fConjugateWord16$fConjugateWord32$fConjugateWord64$fConjugateWord$fConjugateInt8$fConjugateInt16$fConjugateInt32$fConjugateInt64$fConjugateInt$fConjugateIntegerqicutcutWith GHC.Floatasinacosatanasinhacoshatanh MV_Quaternion V_QuaternionqNaN reimagine$fMonadFixQuaternion$fMonadZipQuaternion$fVectorVectorQuaternion$fMVectorMVectorQuaternion$fUnboxQuaternionTFCo:R:MVectorsQuaternionTFCo:R:VectorQuaternion$fEpsilonQuaternion$fFloatingQuaternion$fConjugateQuaternion$fDistributiveQuaternion$fHamiltonianQuaternion$fComplicatedQuaternion$fComplicatedComplex$fMetricQuaternion$fFractionalQuaternion$fHashableQuaternion$fNumQuaternion$fStorableQuaternion$fTraversableQuaternion$fFoldableQuaternion$fEachQuaternionQuaternionab$fIxedQuaternionTFCo:R:IxValueQuaternionTFCo:R:IndexQuaternion!$fTraversableWithIndexEQuaternion$fFoldableWithIndexEQuaternion$fFunctorWithIndexEQuaternion$fRepresentableQuaternion$fIxQuaternion$fMonadQuaternion$fBindQuaternion$fAdditiveQuaternion$fApplicativeQuaternion$fApplyQuaternion$fFunctorQuaternion$fTraceCompose$fTraceProduct$fTraceComplex$fTraceQuaternion$fTracePlucker $fTraceV4 $fTraceV3 $fTraceV2 $fTraceV0$fTraceV$fTraceHashMap $fTraceMap $fTraceIntMapControl.Lens.LensinsideFunctoradjunctions-4.2.1Data.Functor.Rep RepresentableLensTFCo:R:IxValuePointTFCo:R:IndexPoint$fCoalgebrar(,) $fCoalgebrarE$fCoalgebrarE0$fCoalgebrarE1$fCoalgebrarE2$fCoalgebrarE3$fCoalgebrarE4$fCoalgebrarE5$fCoalgebrar()$fCoalgebrarVoid $fAlgebrarE $fAlgebrarE0 $fAlgebrar(,) $fAlgebrar() $fAlgebrarE1 $fAlgebrarE2$fAlgebrarVoid $fNumCovector$fMonadPlusCovector$fAlternativeCovector$fPlusCovector $fAltCovector$fMonadCovector$fBindCovector$fApplicativeCovector$fApplyCovector$fFunctorCovector