geomancy 0.3.1.0 → 0.4.0.0
raw patch · 95 files changed
+23777/−2151 lines, 95 filesdep +tastydep +tasty-benchdep +tasty-hedgehogdep −criterionPVP ok
version bump matches the API change (PVP)
Dependencies added: tasty, tasty-bench, tasty-hedgehog, vector
Dependencies removed: criterion
API changes (from Hackage documentation)
- Geomancy.Point: instance Data.VectorSpace.VectorSpace v GHC.Types.Float => Data.AffineSpace.AffineSpace (Geomancy.Point.Point v) v GHC.Types.Float
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "w" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ww" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "www" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wwzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wywx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wywy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wywz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "wzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "x" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "x" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "x" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xw" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xww" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xwzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xywx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xywy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xywz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "xzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "y" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "y" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "y" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yw" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yww" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "ywzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yywx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yywy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yywz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "yzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "z" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "z" (Geomancy.Swizzle.Swizzle GHC.Types.Float Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zw" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zww" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zwzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zx" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zxzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zy" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zywx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zywy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zywz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zyzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zz" (Geomancy.Swizzle.Swizzle Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzww" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzwx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzwy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzwz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzxz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzyz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzw" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzx" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzy" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3)
- Geomancy.Swizzle: instance GHC.OverloadedLabels.IsLabel "zzzz" (Geomancy.Swizzle.Swizzle Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4)
+ Geomancy: DTransform :: DMat4 -> DTransform
+ Geomancy: [unDTransform] :: DTransform -> DMat4
+ Geomancy: data DMat4
+ Geomancy: data DQuaternion
+ Geomancy: data DVec2
+ Geomancy: data DVec3
+ Geomancy: data DVec4
+ Geomancy: data I64Vec2
+ Geomancy: data I64Vec3
+ Geomancy: data I64Vec4
+ Geomancy: data U64Vec2
+ Geomancy: data U64Vec3
+ Geomancy: data U64Vec4
+ Geomancy: dquaternion :: Double -> Double -> Double -> Double -> DQuaternion
+ Geomancy: dvec2 :: Double -> Double -> DVec2
+ Geomancy: dvec3 :: Double -> Double -> Double -> DVec3
+ Geomancy: dvec4 :: Double -> Double -> Double -> Double -> DVec4
+ Geomancy: i64vec2 :: Int64 -> Int64 -> I64Vec2
+ Geomancy: i64vec3 :: Int64 -> Int64 -> Int64 -> I64Vec3
+ Geomancy: i64vec4 :: Int64 -> Int64 -> Int64 -> Int64 -> I64Vec4
+ Geomancy: newtype DTransform
+ Geomancy: pattern WithDVec2 :: Double -> Double -> DVec2
+ Geomancy: pattern WithDVec3 :: Double -> Double -> Double -> DVec3
+ Geomancy: pattern WithDVec4 :: Double -> Double -> Double -> Double -> DVec4
+ Geomancy: pattern WithI64Vec2 :: Int64 -> Int64 -> I64Vec2
+ Geomancy: pattern WithI64Vec3 :: Int64 -> Int64 -> Int64 -> I64Vec3
+ Geomancy: pattern WithI64Vec4 :: Int64 -> Int64 -> Int64 -> Int64 -> I64Vec4
+ Geomancy: pattern WithU64Vec2 :: Word64 -> Word64 -> U64Vec2
+ Geomancy: pattern WithU64Vec3 :: Word64 -> Word64 -> Word64 -> U64Vec3
+ Geomancy: pattern WithU64Vec4 :: Word64 -> Word64 -> Word64 -> Word64 -> U64Vec4
+ Geomancy: type DPoint2 = Point DVec2
+ Geomancy: type DPoint3 = Point DVec3
+ Geomancy: type DPoint3P = Point Packed
+ Geomancy: type DPoint4 = Point DVec4
+ Geomancy: u64vec2 :: Word64 -> Word64 -> U64Vec2
+ Geomancy: u64vec3 :: Word64 -> Word64 -> Word64 -> U64Vec3
+ Geomancy: u64vec4 :: Word64 -> Word64 -> Word64 -> Word64 -> U64Vec4
+ Geomancy: withDQuaternion :: DQuaternion -> (Double -> Double -> Double -> Double -> r) -> r
+ Geomancy: withDVec2 :: DVec2 -> (Double -> Double -> r) -> r
+ Geomancy: withDVec3 :: DVec3 -> (Double -> Double -> Double -> r) -> r
+ Geomancy: withDVec4 :: DVec4 -> (Double -> Double -> Double -> Double -> r) -> r
+ Geomancy: withI64Vec2 :: I64Vec2 -> (Int64 -> Int64 -> r) -> r
+ Geomancy: withI64Vec3 :: I64Vec3 -> (Int64 -> Int64 -> Int64 -> r) -> r
+ Geomancy: withI64Vec4 :: I64Vec4 -> (Int64 -> Int64 -> Int64 -> Int64 -> r) -> r
+ Geomancy: withU64Vec2 :: U64Vec2 -> (Word64 -> Word64 -> r) -> r
+ Geomancy: withU64Vec3 :: U64Vec3 -> (Word64 -> Word64 -> Word64 -> r) -> r
+ Geomancy: withU64Vec4 :: U64Vec4 -> (Word64 -> Word64 -> Word64 -> Word64 -> r) -> r
+ Geomancy.DMat4: (!*) :: Coercible a DMat4 => a -> DVec4 -> DVec4
+ Geomancy.DMat4: colMajor :: Coercible DMat4 a => Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> a
+ Geomancy.DMat4: data DMat4
+ Geomancy.DMat4: det :: Coercible DMat4 a => a -> Double
+ Geomancy.DMat4: fromMat4 :: Coercible a Mat4 => a -> DMat4
+ Geomancy.DMat4: fromRowMajor2d :: (Foldable t, Coercible DMat4 a) => t (t Double) -> Maybe a
+ Geomancy.DMat4: identity :: DMat4
+ Geomancy.DMat4: infixr 5 !*
+ Geomancy.DMat4: instance GHC.Base.Monoid Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4: instance GHC.Base.Semigroup Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4: instance GHC.Show.Show Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4: inverse :: Coercible DMat4 a => a -> a
+ Geomancy.DMat4: matrixProduct :: DMat4 -> DMat4 -> DMat4
+ Geomancy.DMat4: pointwise :: DMat4 -> DMat4 -> (Double -> Double -> Double) -> DMat4
+ Geomancy.DMat4: rowMajor :: Coercible DMat4 a => Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> a
+ Geomancy.DMat4: scalarMultiply :: Double -> DMat4 -> DMat4
+ Geomancy.DMat4: showColumns :: DMat4 -> String
+ Geomancy.DMat4: showRows :: DMat4 -> String
+ Geomancy.DMat4: toListColMajor :: Coercible a DMat4 => a -> [Double]
+ Geomancy.DMat4: toListColMajor2d :: Coercible a DMat4 => a -> [[Double]]
+ Geomancy.DMat4: toListRowMajor :: Coercible a DMat4 => a -> [Double]
+ Geomancy.DMat4: toListRowMajor2d :: Coercible a DMat4 => a -> [[Double]]
+ Geomancy.DMat4: toMat4 :: DMat4 -> Mat4
+ Geomancy.DMat4: transpose :: DMat4 -> DMat4
+ Geomancy.DMat4: withColMajor :: Coercible a DMat4 => a -> (Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> r) -> r
+ Geomancy.DMat4: withRowMajor :: Coercible a DMat4 => a -> (Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> r) -> r
+ Geomancy.DMat4: zipWith :: (Double -> Double -> c) -> DMat4 -> DMat4 -> [c]
+ Geomancy.DMat4.Internal: DMat4 :: ByteArray# -> DMat4
+ Geomancy.DMat4.Internal: data DMat4
+ Geomancy.DMat4.Internal: fromMemory :: Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> DMat4
+ Geomancy.DMat4.Internal: identity :: DMat4
+ Geomancy.DMat4.Internal: instance Codec.Serialise.Class.Serialise Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4.Internal: instance Control.DeepSeq.NFData Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4.Internal: instance Foreign.Storable.Storable Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4.Internal: instance GHC.Classes.Eq Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4.Internal: instance Graphics.Gl.Block.Block Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4.Internal: instance Language.Haskell.TH.Syntax.Lift Geomancy.DMat4.Internal.DMat4
+ Geomancy.DMat4.Internal: newDMat4 :: IO DMat4
+ Geomancy.DMat4.Internal: pointwise :: DMat4 -> DMat4 -> (Double -> Double -> Double) -> DMat4
+ Geomancy.DMat4.Internal: scalarMultiply :: Double -> DMat4 -> DMat4
+ Geomancy.DMat4.Internal: toList2dMemory :: DMat4 -> [[Double]]
+ Geomancy.DMat4.Internal: toList2dTrans :: DMat4 -> [[Double]]
+ Geomancy.DMat4.Internal: toListMemory :: DMat4 -> [Double]
+ Geomancy.DMat4.Internal: toListTrans :: DMat4 -> [Double]
+ Geomancy.DMat4.Internal: transpose :: DMat4 -> DMat4
+ Geomancy.DMat4.Internal: withMemory :: DMat4 -> (Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> r) -> r
+ Geomancy.DMat4.Internal: zipWith :: (Double -> Double -> c) -> DMat4 -> DMat4 -> [c]
+ Geomancy.DQuaternion: (^*) :: DQuaternion -> Double -> DQuaternion
+ Geomancy.DQuaternion: (^/) :: DQuaternion -> Double -> DQuaternion
+ Geomancy.DQuaternion: axisAngle :: DVec3 -> Double -> DQuaternion
+ Geomancy.DQuaternion: conjugate :: DQuaternion -> DQuaternion
+ Geomancy.DQuaternion: data DQuaternion
+ Geomancy.DQuaternion: dot :: DQuaternion -> DQuaternion -> Double
+ Geomancy.DQuaternion: dquaternion :: Double -> Double -> Double -> Double -> DQuaternion
+ Geomancy.DQuaternion: extrinsic :: Double -> Double -> Double -> DQuaternion
+ Geomancy.DQuaternion: fromQuaternion :: Quaternion -> DQuaternion
+ Geomancy.DQuaternion: instance Codec.Serialise.Class.Serialise Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance Control.DeepSeq.NFData Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance Foreign.Storable.Storable Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance GHC.Classes.Eq Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance GHC.Classes.Ord Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance GHC.Num.Num Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance GHC.Show.Show Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance Graphics.Gl.Block.Block Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: instance Language.Haskell.TH.Syntax.Lift Geomancy.DQuaternion.DQuaternion
+ Geomancy.DQuaternion: intrinsic :: Double -> Double -> Double -> DQuaternion
+ Geomancy.DQuaternion: lookAtUp :: DVec3 -> DVec3 -> DVec3 -> DQuaternion
+ Geomancy.DQuaternion: norm :: DQuaternion -> Double
+ Geomancy.DQuaternion: normalize :: DQuaternion -> DQuaternion
+ Geomancy.DQuaternion: qNaN :: DQuaternion
+ Geomancy.DQuaternion: quadrance :: DQuaternion -> Double
+ Geomancy.DQuaternion: rotate :: DQuaternion -> DVec3 -> DVec3
+ Geomancy.DQuaternion: rotatePoint :: DQuaternion -> DVec3 -> DVec3 -> DVec3
+ Geomancy.DQuaternion: rotationBetween :: DVec3 -> DVec3 -> DQuaternion
+ Geomancy.DQuaternion: slerp :: DQuaternion -> DQuaternion -> Double -> DQuaternion
+ Geomancy.DQuaternion: toQuaternion :: DQuaternion -> Quaternion
+ Geomancy.DQuaternion: withDQuaternion :: DQuaternion -> (Double -> Double -> Double -> Double -> r) -> r
+ Geomancy.DTransform: (!.) :: DTransform -> DVec3 -> DVec3
+ Geomancy.DTransform: DTransform :: DMat4 -> DTransform
+ Geomancy.DTransform: [unDTransform] :: DTransform -> DMat4
+ Geomancy.DTransform: apply :: DVec3 -> DTransform -> DVec3
+ Geomancy.DTransform: dirPos :: DQuaternion -> DVec3 -> DTransform
+ Geomancy.DTransform: fromTransform :: Transform -> DTransform
+ Geomancy.DTransform: infixr 5 !.
+ Geomancy.DTransform: instance Codec.Serialise.Class.Serialise Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance Foreign.Storable.Storable Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance GHC.Base.Monoid Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance GHC.Base.Semigroup Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance GHC.Classes.Eq Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance GHC.Show.Show Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance Graphics.Gl.Block.Block Geomancy.DTransform.DTransform
+ Geomancy.DTransform: instance Language.Haskell.TH.Syntax.Lift Geomancy.DTransform.DTransform
+ Geomancy.DTransform: inverse :: Coercible DMat4 a => a -> a
+ Geomancy.DTransform: newtype DTransform
+ Geomancy.DTransform: node :: DVec3 -> DQuaternion -> DVec3 -> DTransform
+ Geomancy.DTransform: rotateQ :: DQuaternion -> DTransform
+ Geomancy.DTransform: rotateX :: Double -> DTransform
+ Geomancy.DTransform: rotateY :: Double -> DTransform
+ Geomancy.DTransform: rotateZ :: Double -> DTransform
+ Geomancy.DTransform: scale :: Double -> DTransform
+ Geomancy.DTransform: scale3 :: Double -> Double -> Double -> DTransform
+ Geomancy.DTransform: scaleV :: DVec3 -> DTransform
+ Geomancy.DTransform: scaleX :: Double -> DTransform
+ Geomancy.DTransform: scaleXY :: Double -> Double -> DTransform
+ Geomancy.DTransform: scaleY :: Double -> DTransform
+ Geomancy.DTransform: scaleZ :: Double -> DTransform
+ Geomancy.DTransform: toTransform :: DTransform -> Transform
+ Geomancy.DTransform: translate :: Double -> Double -> Double -> DTransform
+ Geomancy.DTransform: translateV :: DVec3 -> DTransform
+ Geomancy.DTransform.Tree: apply :: Semigroup ann => Tree (ann, a) -> Tree (ann, a)
+ Geomancy.DTransform.Tree: collect_ :: Monoid ann => Tree (ann, Maybe a) -> [(ann, a)]
+ Geomancy.DTransform.Tree: leaf_ :: Monoid ann => a -> Tree (ann, Maybe a)
+ Geomancy.DTransform.Tree: node_ :: ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a)
+ Geomancy.DTransform.Tree: rotateQ_ :: DQuaternion -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: rotateX_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: rotateY_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: rotateZ_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: scale3_ :: Double -> Double -> Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: scaleXY_ :: Double -> Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: scaleX_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: scaleY_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: scaleZ_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: scale_ :: Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: translateV_ :: DVec3 -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: translate_ :: Double -> Double -> Double -> [Transformed a] -> Transformed a
+ Geomancy.DTransform.Tree: type Transformed a = Tree (DTransform, Maybe a)
+ Geomancy.DVec2: (^*) :: DVec2 -> Double -> DVec2
+ Geomancy.DVec2: (^/) :: DVec2 -> Double -> DVec2
+ Geomancy.DVec2: convert :: Coercible v DVec2 => (Double -> a) -> (a -> a -> r) -> v -> r
+ Geomancy.DVec2: data DVec2
+ Geomancy.DVec2: dot :: DVec2 -> DVec2 -> Double
+ Geomancy.DVec2: dvec2 :: Double -> Double -> DVec2
+ Geomancy.DVec2: fromTuple :: (Double, Double) -> DVec2
+ Geomancy.DVec2: fromVec2 :: Vec2 -> DVec2
+ Geomancy.DVec2: instance Codec.Serialise.Class.Serialise Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Control.DeepSeq.NFData Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Data.MonoTraversable.MonoFunctor Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Data.MonoTraversable.MonoPointed Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Data.VectorSpace.VectorSpace Geomancy.DVec2.DVec2 GHC.Types.Double
+ Geomancy.DVec2: instance Foreign.Storable.Storable Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance GHC.Classes.Eq Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance GHC.Classes.Ord Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance GHC.Float.Floating Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance GHC.Num.Num Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance GHC.Real.Fractional Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance GHC.Records.HasField "x" Geomancy.DVec2.DVec2 GHC.Types.Double
+ Geomancy.DVec2: instance GHC.Records.HasField "y" Geomancy.DVec2.DVec2 GHC.Types.Double
+ Geomancy.DVec2: instance GHC.Show.Show Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Geomancy.Elementwise.Elementwise Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Graphics.Gl.Block.Block Geomancy.DVec2.DVec2
+ Geomancy.DVec2: instance Language.Haskell.TH.Syntax.Lift Geomancy.DVec2.DVec2
+ Geomancy.DVec2: lerp :: Double -> DVec2 -> DVec2 -> DVec2
+ Geomancy.DVec2: normalize :: DVec2 -> DVec2
+ Geomancy.DVec2: pattern WithDVec2 :: Double -> Double -> DVec2
+ Geomancy.DVec2: toVec2 :: DVec2 -> Vec2
+ Geomancy.DVec2: withDVec2 :: DVec2 -> (Double -> Double -> r) -> r
+ Geomancy.DVec3: (^*) :: DVec3 -> Double -> DVec3
+ Geomancy.DVec3: (^/) :: DVec3 -> Double -> DVec3
+ Geomancy.DVec3: Packed :: DVec3 -> Packed
+ Geomancy.DVec3: [unPacked] :: Packed -> DVec3
+ Geomancy.DVec3: convert :: Coercible v DVec3 => (Double -> a) -> (a -> a -> a -> r) -> v -> r
+ Geomancy.DVec3: cross :: DVec3 -> DVec3 -> DVec3
+ Geomancy.DVec3: data DVec3
+ Geomancy.DVec3: dot :: DVec3 -> DVec3 -> Double
+ Geomancy.DVec3: dvec3 :: Double -> Double -> Double -> DVec3
+ Geomancy.DVec3: emap2 :: Elementwise a => (Element a -> Element a -> Element a) -> a -> a -> a
+ Geomancy.DVec3: emap3 :: Elementwise a => (Element a -> Element a -> Element a -> Element a) -> a -> a -> a -> a
+ Geomancy.DVec3: emap4 :: Elementwise a => (Element a -> Element a -> Element a -> Element a -> Element a) -> a -> a -> a -> a -> a
+ Geomancy.DVec3: fromDVec2 :: Coercible DVec3 a => DVec2 -> Double -> a
+ Geomancy.DVec3: fromTuple :: Coercible DVec3 a => (Double, Double, Double) -> a
+ Geomancy.DVec3: fromVec3 :: Vec3 -> DVec3
+ Geomancy.DVec3: instance Codec.Serialise.Class.Serialise Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Control.DeepSeq.NFData Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Control.DeepSeq.NFData Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance Data.MonoTraversable.MonoFunctor Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Data.MonoTraversable.MonoFunctor Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance Data.MonoTraversable.MonoPointed Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Data.MonoTraversable.MonoPointed Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance Data.VectorSpace.VectorSpace Geomancy.DVec3.DVec3 GHC.Types.Double
+ Geomancy.DVec3: instance Data.VectorSpace.VectorSpace Geomancy.DVec3.Packed GHC.Types.Double
+ Geomancy.DVec3: instance Foreign.Storable.Storable Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Foreign.Storable.Storable Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance GHC.Classes.Eq Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance GHC.Classes.Eq Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance GHC.Classes.Ord Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance GHC.Classes.Ord Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance GHC.Float.Floating Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance GHC.Float.Floating Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance GHC.Num.Num Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance GHC.Num.Num Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance GHC.Real.Fractional Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance GHC.Real.Fractional Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance GHC.Records.HasField "x" Geomancy.DVec3.DVec3 GHC.Types.Double
+ Geomancy.DVec3: instance GHC.Records.HasField "x" Geomancy.DVec3.Packed GHC.Types.Double
+ Geomancy.DVec3: instance GHC.Records.HasField "y" Geomancy.DVec3.DVec3 GHC.Types.Double
+ Geomancy.DVec3: instance GHC.Records.HasField "y" Geomancy.DVec3.Packed GHC.Types.Double
+ Geomancy.DVec3: instance GHC.Records.HasField "z" Geomancy.DVec3.DVec3 GHC.Types.Double
+ Geomancy.DVec3: instance GHC.Records.HasField "z" Geomancy.DVec3.Packed GHC.Types.Double
+ Geomancy.DVec3: instance GHC.Show.Show Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance GHC.Show.Show Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance Geomancy.Elementwise.Elementwise Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Geomancy.Elementwise.Elementwise Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance Graphics.Gl.Block.Block Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Graphics.Gl.Block.Block Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance Language.Haskell.TH.Syntax.Lift Geomancy.DVec3.DVec3
+ Geomancy.DVec3: instance Language.Haskell.TH.Syntax.Lift Geomancy.DVec3.Packed
+ Geomancy.DVec3: instance WebColor.Labels.IsWebColor s => GHC.OverloadedLabels.IsLabel s Geomancy.DVec3.DVec3
+ Geomancy.DVec3: lerp :: Double -> DVec3 -> DVec3 -> DVec3
+ Geomancy.DVec3: newtype Packed
+ Geomancy.DVec3: normalize :: DVec3 -> DVec3
+ Geomancy.DVec3: packed :: Double -> Double -> Double -> Packed
+ Geomancy.DVec3: pattern WithDVec3 :: Double -> Double -> Double -> DVec3
+ Geomancy.DVec3: toVec3 :: DVec3 -> Vec3
+ Geomancy.DVec3: withDVec3 :: DVec3 -> (Double -> Double -> Double -> r) -> r
+ Geomancy.DVec4: (^*) :: DVec4 -> Double -> DVec4
+ Geomancy.DVec4: (^/) :: DVec4 -> Double -> DVec4
+ Geomancy.DVec4: DVec4 :: ByteArray# -> DVec4
+ Geomancy.DVec4: convert :: Coercible v DVec4 => (Double -> a) -> (a -> a -> a -> a -> r) -> v -> r
+ Geomancy.DVec4: data DVec4
+ Geomancy.DVec4: dot :: DVec4 -> DVec4 -> Double
+ Geomancy.DVec4: dvec4 :: Double -> Double -> Double -> Double -> DVec4
+ Geomancy.DVec4: fromDVec2 :: DVec2 -> Double -> Double -> DVec4
+ Geomancy.DVec4: fromDVec22 :: DVec2 -> DVec2 -> DVec4
+ Geomancy.DVec4: fromDVec3 :: Coercible a DVec3 => a -> Double -> DVec4
+ Geomancy.DVec4: fromTuple :: (Double, Double, Double, Double) -> DVec4
+ Geomancy.DVec4: fromVec4 :: Vec4 -> DVec4
+ Geomancy.DVec4: instance Codec.Serialise.Class.Serialise Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Control.DeepSeq.NFData Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Data.MonoTraversable.MonoFunctor Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Data.MonoTraversable.MonoPointed Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Data.VectorSpace.VectorSpace Geomancy.DVec4.DVec4 GHC.Types.Double
+ Geomancy.DVec4: instance Foreign.Storable.Storable Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance GHC.Classes.Eq Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance GHC.Classes.Ord Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance GHC.Float.Floating Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance GHC.Num.Num Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance GHC.Real.Fractional Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance GHC.Records.HasField "w" Geomancy.DVec4.DVec4 GHC.Types.Double
+ Geomancy.DVec4: instance GHC.Records.HasField "x" Geomancy.DVec4.DVec4 GHC.Types.Double
+ Geomancy.DVec4: instance GHC.Records.HasField "y" Geomancy.DVec4.DVec4 GHC.Types.Double
+ Geomancy.DVec4: instance GHC.Records.HasField "z" Geomancy.DVec4.DVec4 GHC.Types.Double
+ Geomancy.DVec4: instance GHC.Show.Show Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Geomancy.Elementwise.Elementwise Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Graphics.Gl.Block.Block Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance Language.Haskell.TH.Syntax.Lift Geomancy.DVec4.DVec4
+ Geomancy.DVec4: instance WebColor.Labels.IsWebColorAlpha s => GHC.OverloadedLabels.IsLabel s Geomancy.DVec4.DVec4
+ Geomancy.DVec4: lerp :: Double -> DVec4 -> DVec4 -> DVec4
+ Geomancy.DVec4: newDVec4 :: IO DVec4
+ Geomancy.DVec4: normalize :: DVec4 -> DVec4
+ Geomancy.DVec4: pattern WithDVec4 :: Double -> Double -> Double -> Double -> DVec4
+ Geomancy.DVec4: toVec4 :: DVec4 -> Vec4
+ Geomancy.DVec4: withDVec4 :: DVec4 -> (Double -> Double -> Double -> Double -> r) -> r
+ Geomancy.I64Vec2: convert :: Coercible v I64Vec2 => (Int64 -> a) -> (a -> a -> r) -> v -> r
+ Geomancy.I64Vec2: data I64Vec2
+ Geomancy.I64Vec2: dot :: I64Vec2 -> I64Vec2 -> Int64
+ Geomancy.I64Vec2: fromTuple :: (Int64, Int64) -> I64Vec2
+ Geomancy.I64Vec2: i64vec2 :: Int64 -> Int64 -> I64Vec2
+ Geomancy.I64Vec2: instance Codec.Serialise.Class.Serialise Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Control.DeepSeq.NFData Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Data.MonoTraversable.MonoFunctor Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Data.MonoTraversable.MonoPointed Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Foreign.Storable.Storable Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance GHC.Classes.Eq Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance GHC.Classes.Ord Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance GHC.Ix.Ix Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance GHC.Num.Num Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance GHC.Records.HasField "x" Geomancy.I64Vec2.I64Vec2 GHC.Int.Int64
+ Geomancy.I64Vec2: instance GHC.Records.HasField "y" Geomancy.I64Vec2.I64Vec2 GHC.Int.Int64
+ Geomancy.I64Vec2: instance GHC.Show.Show Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Geomancy.Elementwise.Elementwise Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Graphics.Gl.Block.Block Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: instance Language.Haskell.TH.Syntax.Lift Geomancy.I64Vec2.I64Vec2
+ Geomancy.I64Vec2: pattern WithI64Vec2 :: Int64 -> Int64 -> I64Vec2
+ Geomancy.I64Vec2: withI64Vec2 :: I64Vec2 -> (Int64 -> Int64 -> r) -> r
+ Geomancy.I64Vec3: Packed :: I64Vec3 -> Packed
+ Geomancy.I64Vec3: [unPacked] :: Packed -> I64Vec3
+ Geomancy.I64Vec3: convert :: Coercible v I64Vec3 => (Int64 -> a) -> (a -> a -> a -> r) -> v -> r
+ Geomancy.I64Vec3: data I64Vec3
+ Geomancy.I64Vec3: dot :: I64Vec3 -> I64Vec3 -> Int64
+ Geomancy.I64Vec3: fromTuple :: (Int64, Int64, Int64) -> I64Vec3
+ Geomancy.I64Vec3: i64vec3 :: Int64 -> Int64 -> Int64 -> I64Vec3
+ Geomancy.I64Vec3: instance Codec.Serialise.Class.Serialise Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Control.DeepSeq.NFData Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Control.DeepSeq.NFData Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance Data.MonoTraversable.MonoFunctor Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Data.MonoTraversable.MonoPointed Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Foreign.Storable.Storable Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Foreign.Storable.Storable Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance GHC.Classes.Eq Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance GHC.Classes.Eq Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance GHC.Classes.Ord Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance GHC.Classes.Ord Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance GHC.Ix.Ix Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance GHC.Num.Num Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance GHC.Num.Num Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance GHC.Records.HasField "x" Geomancy.I64Vec3.I64Vec3 GHC.Int.Int64
+ Geomancy.I64Vec3: instance GHC.Records.HasField "x" Geomancy.I64Vec3.Packed GHC.Int.Int64
+ Geomancy.I64Vec3: instance GHC.Records.HasField "y" Geomancy.I64Vec3.I64Vec3 GHC.Int.Int64
+ Geomancy.I64Vec3: instance GHC.Records.HasField "y" Geomancy.I64Vec3.Packed GHC.Int.Int64
+ Geomancy.I64Vec3: instance GHC.Records.HasField "z" Geomancy.I64Vec3.I64Vec3 GHC.Int.Int64
+ Geomancy.I64Vec3: instance GHC.Records.HasField "z" Geomancy.I64Vec3.Packed GHC.Int.Int64
+ Geomancy.I64Vec3: instance GHC.Show.Show Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance GHC.Show.Show Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance Geomancy.Elementwise.Elementwise Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Graphics.Gl.Block.Block Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: instance Graphics.Gl.Block.Block Geomancy.I64Vec3.Packed
+ Geomancy.I64Vec3: instance Language.Haskell.TH.Syntax.Lift Geomancy.I64Vec3.I64Vec3
+ Geomancy.I64Vec3: newtype Packed
+ Geomancy.I64Vec3: packed :: Int64 -> Int64 -> Int64 -> Packed
+ Geomancy.I64Vec3: pattern WithI64Vec3 :: Int64 -> Int64 -> Int64 -> I64Vec3
+ Geomancy.I64Vec3: withI64Vec3 :: I64Vec3 -> (Int64 -> Int64 -> Int64 -> r) -> r
+ Geomancy.I64Vec4: convert :: Coercible v I64Vec4 => (Int64 -> a) -> (a -> a -> a -> a -> r) -> v -> r
+ Geomancy.I64Vec4: data I64Vec4
+ Geomancy.I64Vec4: dot :: I64Vec4 -> I64Vec4 -> Int64
+ Geomancy.I64Vec4: fromTuple :: (Int64, Int64, Int64, Int64) -> I64Vec4
+ Geomancy.I64Vec4: i64vec4 :: Int64 -> Int64 -> Int64 -> Int64 -> I64Vec4
+ Geomancy.I64Vec4: instance Codec.Serialise.Class.Serialise Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Control.DeepSeq.NFData Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Data.MonoTraversable.MonoFunctor Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Data.MonoTraversable.MonoPointed Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Foreign.Storable.Storable Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance GHC.Classes.Eq Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance GHC.Classes.Ord Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance GHC.Ix.Ix Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance GHC.Num.Num Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance GHC.Records.HasField "w" Geomancy.I64Vec4.I64Vec4 GHC.Int.Int64
+ Geomancy.I64Vec4: instance GHC.Records.HasField "x" Geomancy.I64Vec4.I64Vec4 GHC.Int.Int64
+ Geomancy.I64Vec4: instance GHC.Records.HasField "y" Geomancy.I64Vec4.I64Vec4 GHC.Int.Int64
+ Geomancy.I64Vec4: instance GHC.Records.HasField "z" Geomancy.I64Vec4.I64Vec4 GHC.Int.Int64
+ Geomancy.I64Vec4: instance GHC.Show.Show Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Geomancy.Elementwise.Elementwise Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Graphics.Gl.Block.Block Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: instance Language.Haskell.TH.Syntax.Lift Geomancy.I64Vec4.I64Vec4
+ Geomancy.I64Vec4: pattern WithI64Vec4 :: Int64 -> Int64 -> Int64 -> Int64 -> I64Vec4
+ Geomancy.I64Vec4: withI64Vec4 :: I64Vec4 -> (Int64 -> Int64 -> Int64 -> Int64 -> r) -> r
+ Geomancy.IVec2: instance GHC.Records.HasField "x" Geomancy.IVec2.IVec2 GHC.Int.Int32
+ Geomancy.IVec2: instance GHC.Records.HasField "y" Geomancy.IVec2.IVec2 GHC.Int.Int32
+ Geomancy.IVec3: instance GHC.Records.HasField "x" Geomancy.IVec3.IVec3 GHC.Int.Int32
+ Geomancy.IVec3: instance GHC.Records.HasField "x" Geomancy.IVec3.Packed GHC.Int.Int32
+ Geomancy.IVec3: instance GHC.Records.HasField "y" Geomancy.IVec3.IVec3 GHC.Int.Int32
+ Geomancy.IVec3: instance GHC.Records.HasField "y" Geomancy.IVec3.Packed GHC.Int.Int32
+ Geomancy.IVec3: instance GHC.Records.HasField "z" Geomancy.IVec3.IVec3 GHC.Int.Int32
+ Geomancy.IVec3: instance GHC.Records.HasField "z" Geomancy.IVec3.Packed GHC.Int.Int32
+ Geomancy.IVec4: instance GHC.Records.HasField "w" Geomancy.IVec4.IVec4 GHC.Int.Int32
+ Geomancy.IVec4: instance GHC.Records.HasField "x" Geomancy.IVec4.IVec4 GHC.Int.Int32
+ Geomancy.IVec4: instance GHC.Records.HasField "y" Geomancy.IVec4.IVec4 GHC.Int.Int32
+ Geomancy.IVec4: instance GHC.Records.HasField "z" Geomancy.IVec4.IVec4 GHC.Int.Int32
+ Geomancy.Mat4.Internal: instance GHC.Classes.Eq Geomancy.Mat4.Internal.Mat4
+ Geomancy.Point: instance (GHC.Float.Floating a, Data.VectorSpace.VectorSpace v a) => Data.AffineSpace.AffineSpace (Geomancy.Point.Point v) v a
+ Geomancy.Point: instance GHC.Records.HasField "w" v a => GHC.Records.HasField "w" (Geomancy.Point.Point v) a
+ Geomancy.Point: instance GHC.Records.HasField "x" v a => GHC.Records.HasField "x" (Geomancy.Point.Point v) a
+ Geomancy.Point: instance GHC.Records.HasField "y" v a => GHC.Records.HasField "y" (Geomancy.Point.Point v) a
+ Geomancy.Point: instance GHC.Records.HasField "z" v a => GHC.Records.HasField "z" (Geomancy.Point.Point v) a
+ Geomancy.Point: type DPoint2 = Point DVec2
+ Geomancy.Point: type DPoint3 = Point DVec3
+ Geomancy.Point: type DPoint3P = Point Packed
+ Geomancy.Point: type DPoint4 = Point DVec4
+ Geomancy.Swizzle: instance GHC.Records.HasField s fro to => GHC.OverloadedLabels.IsLabel s (Geomancy.Swizzle.Swizzle to fro)
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "ww" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "www" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wwx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wwy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wwz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wx" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wxw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wxx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wxy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wxz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wy" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wyw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wyx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wyy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wyz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wz" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wzw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wzx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wzy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "wzz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xw" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xww" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xwx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xwy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xwz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xx" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xx" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xxw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xxx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xxy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xxz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xy" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xy" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xyw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xyx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xyy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xyz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xz" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xz" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xzw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xzx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xzy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "xzz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yw" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yww" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "ywx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "ywy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "ywz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yx" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yx" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yxw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yxx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yxy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yxz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yy" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yy" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yyw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yyx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yyy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yyz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yz" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yz" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yzw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yzx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yzy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "yzz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zw" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zww" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zwx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zwy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zwz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zx" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zx" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zxw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zxx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zxy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zxz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zy" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zy" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zyw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zyx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zyy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zyz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zz" Geomancy.DVec3.DVec3 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zz" Geomancy.DVec4.DVec4 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zzw" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zzx" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zzy" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Down: instance GHC.Records.HasField "zzz" Geomancy.DVec4.DVec4 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xy0" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xy00" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xy01" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xy1" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xy10" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xy11" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xyz0" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Extend: instance GHC.Records.HasField "xyz1" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wwzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wxzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wywx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wywy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wywz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wyzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "wzzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xwzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xx" Geomancy.DVec2.DVec2 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xxzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xy" Geomancy.DVec2.DVec2 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xywx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xywy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xywz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xyzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "xzzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "ywzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yx" Geomancy.DVec2.DVec2 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yxzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yy" Geomancy.DVec2.DVec2 Geomancy.DVec2.DVec2
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yywx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yywy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yywz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yyzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "yzzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zwzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zxzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zywx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zywy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zywz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zyzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzww" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzwx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzwy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzwz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzx" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzxw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzxx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzxy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzxz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzy" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzyw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzyx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzyy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzyz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzz" Geomancy.DVec3.DVec3 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzzw" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzzx" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzzy" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Shuffle: instance GHC.Records.HasField "zzzz" Geomancy.DVec4.DVec4 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxx" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxxx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxxy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxy" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxyx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxyy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xxzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyx" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyxx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyxy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyy" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyyx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyyy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xyzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "xzzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxx" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxxx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxxy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxy" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxyx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxyy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yxzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyx" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyxx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyxy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyy" Geomancy.DVec2.DVec2 Geomancy.DVec3.DVec3
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyyx" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyyy" Geomancy.DVec2.DVec2 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yyzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "yzzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zxzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zyzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzxx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzxy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzxz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzyx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzyy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzyz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzzx" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzzy" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.DVec.Up: instance GHC.Records.HasField "zzzz" Geomancy.DVec3.DVec3 Geomancy.DVec4.DVec4
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "ww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "www" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "wzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "xzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "ywx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "ywy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "ywz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "yzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Down: instance GHC.Records.HasField "zzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xy0" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xy00" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xy01" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xy1" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xy10" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xy11" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xyz0" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Extend: instance GHC.Records.HasField "xyz1" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wwzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wxzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wywx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wywy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wywz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wyzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "wzzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xwzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xxzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xywx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xywy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xywz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xyzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "xzzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "ywzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yxzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec2.I64Vec2
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yywx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yywy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yywz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yyzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "yzzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zwzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zxzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zywx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zywy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zywz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zyzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzww" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzwx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzwy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzwz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzxw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzxx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzxy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzxz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzyw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzyx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzyy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzyz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzzw" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzzx" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzzy" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Shuffle: instance GHC.Records.HasField "zzzz" Geomancy.I64Vec4.I64Vec4 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxxx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxxy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxyx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxyy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xxzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyxx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyxy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyyx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyyy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xyzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "xzzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxxx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxxy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxyx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxyy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yxzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyxx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyxy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec3.I64Vec3
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyyx" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyyy" Geomancy.I64Vec2.I64Vec2 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yyzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "yzzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zxzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zyzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzxx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzxy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzxz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzyx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzyy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzyz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzzx" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzzy" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.I64Vec.Up: instance GHC.Records.HasField "zzzz" Geomancy.I64Vec3.I64Vec3 Geomancy.I64Vec4.I64Vec4
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "ww" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "www" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wwx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wwy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wwz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wx" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wxw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wxx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wxy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wxz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wy" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wyw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wyx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wyy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wyz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wz" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wzw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wzx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wzy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "wzz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xw" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xww" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xwx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xwy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xwz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xx" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xx" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xxw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xxx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xxy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xxz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xy" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xy" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xyw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xyx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xyy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xyz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xz" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xz" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xzw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xzx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xzy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "xzz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yw" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yww" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "ywx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "ywy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "ywz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yx" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yx" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yxw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yxx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yxy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yxz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yy" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yy" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yyw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yyx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yyy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yyz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yz" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yz" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yzw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yzx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yzy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "yzz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zw" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zww" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zwx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zwy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zwz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zx" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zx" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zxw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zxx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zxy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zxz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zy" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zy" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zyw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zyx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zyy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zyz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zz" Geomancy.IVec3.IVec3 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zz" Geomancy.IVec4.IVec4 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zzw" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zzx" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zzy" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Down: instance GHC.Records.HasField "zzz" Geomancy.IVec4.IVec4 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xy0" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xy00" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xy01" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xy1" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xy10" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xy11" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xyz0" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Extend: instance GHC.Records.HasField "xyz1" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wwzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wxzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wywx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wywy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wywz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wyzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "wzzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xwzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xx" Geomancy.IVec2.IVec2 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xxzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xy" Geomancy.IVec2.IVec2 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xywx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xywy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xywz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xyzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "xzzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "ywzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yx" Geomancy.IVec2.IVec2 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yxzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yy" Geomancy.IVec2.IVec2 Geomancy.IVec2.IVec2
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yywx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yywy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yywz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yyzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "yzzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zwzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zxzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zywx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zywy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zywz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zyzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzww" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzwx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzwy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzwz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzx" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzxw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzxx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzxy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzxz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzy" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzyw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzyx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzyy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzyz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzz" Geomancy.IVec3.IVec3 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzzw" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzzx" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzzy" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Shuffle: instance GHC.Records.HasField "zzzz" Geomancy.IVec4.IVec4 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxx" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxxx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxxy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxy" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxyx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxyy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xxzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyx" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyxx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyxy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyy" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyyx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyyy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xyzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "xzzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxx" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxxx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxxy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxy" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxyx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxyy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yxzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyx" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyxx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyxy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyy" Geomancy.IVec2.IVec2 Geomancy.IVec3.IVec3
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyyx" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyyy" Geomancy.IVec2.IVec2 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yyzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "yzzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zxzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zyzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzxx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzxy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzxz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzyx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzyy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzyz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzzx" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzzy" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.IVec.Up: instance GHC.Records.HasField "zzzz" Geomancy.IVec3.IVec3 Geomancy.IVec4.IVec4
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "ww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "www" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "wzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "xzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "ywx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "ywy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "ywz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "yzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Down: instance GHC.Records.HasField "zzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xy0" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xy00" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xy01" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xy1" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xy10" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xy11" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xyz0" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Extend: instance GHC.Records.HasField "xyz1" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wwzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wxzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wywx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wywy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wywz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wyzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "wzzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xwzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xxzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xywx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xywy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xywz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xyzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "xzzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "ywzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yxzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec2.U64Vec2
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yywx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yywy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yywz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yyzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "yzzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zwzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zxzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zywx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zywy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zywz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zyzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzww" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzwx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzwy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzwz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzxw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzxx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzxy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzxz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzyw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzyx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzyy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzyz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzzw" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzzx" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzzy" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Shuffle: instance GHC.Records.HasField "zzzz" Geomancy.U64Vec4.U64Vec4 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxxx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxxy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxyx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxyy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xxzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyxx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyxy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyyx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyyy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xyzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "xzzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxxx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxxy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxyx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxyy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yxzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyxx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyxy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec3.U64Vec3
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyyx" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyyy" Geomancy.U64Vec2.U64Vec2 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yyzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "yzzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zxzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zyzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzxx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzxy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzxz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzyx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzyy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzyz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzzx" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzzy" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.U64Vec.Up: instance GHC.Records.HasField "zzzz" Geomancy.U64Vec3.U64Vec3 Geomancy.U64Vec4.U64Vec4
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "ww" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "www" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wwx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wwy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wwz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wx" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wxw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wxx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wxy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wxz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wy" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wyw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wyx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wyy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wyz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wz" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wzw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wzx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wzy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "wzz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xw" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xww" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xwx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xwy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xwz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xx" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xx" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xxw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xxx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xxy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xxz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xy" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xy" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xyw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xyx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xyy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xyz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xz" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xz" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xzw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xzx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xzy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "xzz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yw" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yww" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "ywx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "ywy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "ywz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yx" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yx" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yxw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yxx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yxy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yxz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yy" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yy" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yyw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yyx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yyy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yyz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yz" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yz" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yzw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yzx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yzy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "yzz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zw" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zww" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zwx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zwy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zwz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zx" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zx" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zxw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zxx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zxy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zxz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zy" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zy" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zyw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zyx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zyy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zyz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zz" Geomancy.UVec3.UVec3 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zz" Geomancy.UVec4.UVec4 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zzw" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zzx" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zzy" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Down: instance GHC.Records.HasField "zzz" Geomancy.UVec4.UVec4 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xy0" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xy00" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xy01" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xy1" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xy10" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xy11" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xyz0" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Extend: instance GHC.Records.HasField "xyz1" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wwzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wxzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wywx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wywy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wywz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wyzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "wzzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xwzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xx" Geomancy.UVec2.UVec2 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xxzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xy" Geomancy.UVec2.UVec2 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xywx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xywy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xywz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xyzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "xzzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "ywzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yx" Geomancy.UVec2.UVec2 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yxzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yy" Geomancy.UVec2.UVec2 Geomancy.UVec2.UVec2
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yywx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yywy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yywz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yyzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "yzzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zwzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zxzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zywx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zywy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zywz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zyzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzww" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzwx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzwy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzwz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzx" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzxw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzxx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzxy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzxz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzy" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzyw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzyx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzyy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzyz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzz" Geomancy.UVec3.UVec3 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzzw" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzzx" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzzy" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Shuffle: instance GHC.Records.HasField "zzzz" Geomancy.UVec4.UVec4 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxx" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxxx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxxy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxy" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxyx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxyy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xxzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyx" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyxx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyxy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyy" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyyx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyyy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xyzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "xzzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxx" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxxx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxxy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxy" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxyx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxyy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yxzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyx" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyxx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyxy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyy" Geomancy.UVec2.UVec2 Geomancy.UVec3.UVec3
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyyx" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyyy" Geomancy.UVec2.UVec2 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yyzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "yzzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zxzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zyzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzxx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzxy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzxz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzyx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzyy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzyz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzzx" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzzy" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.UVec.Up: instance GHC.Records.HasField "zzzz" Geomancy.UVec3.UVec3 Geomancy.UVec4.UVec4
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "ww" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "www" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wwx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wwy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wwz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wx" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wxw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wxx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wxy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wxz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wy" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wyw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wyx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wyy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wyz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wz" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wzw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wzx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wzy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "wzz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xw" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xww" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xwx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xwy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xwz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xx" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xx" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xxw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xxx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xxy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xxz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xy" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xy" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xyw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xyx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xyy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xyz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xz" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xz" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xzw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xzx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xzy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "xzz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yw" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yww" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "ywx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "ywy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "ywz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yx" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yx" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yxw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yxx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yxy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yxz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yy" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yy" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yyw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yyx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yyy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yyz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yz" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yz" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yzw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yzx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yzy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "yzz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zw" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zww" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zwx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zwy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zwz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zx" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zx" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zxw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zxx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zxy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zxz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zy" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zy" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zyw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zyx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zyy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zyz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zz" Geomancy.Vec3.Vec3 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zz" Geomancy.Vec4.Vec4 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zzw" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zzx" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zzy" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Down: instance GHC.Records.HasField "zzz" Geomancy.Vec4.Vec4 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xy0" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xy00" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xy01" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xy1" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xy10" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xy11" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xyz0" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Extend: instance GHC.Records.HasField "xyz1" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wwzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wxzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wywx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wywy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wywz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wyzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "wzzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xwzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xx" Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xxzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xy" Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xywx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xywy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xywz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xyzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "xzzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "ywzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yx" Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yxzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yy" Geomancy.Vec2.Vec2 Geomancy.Vec2.Vec2
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yywx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yywy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yywz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yyzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "yzzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zwzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zxzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zywx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zywy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zywz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zyzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzww" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzwx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzwy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzwz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzx" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzxw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzxx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzxy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzxz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzy" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzyw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzyx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzyy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzyz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzz" Geomancy.Vec3.Vec3 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzzw" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzzx" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzzy" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Shuffle: instance GHC.Records.HasField "zzzz" Geomancy.Vec4.Vec4 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxx" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxxx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxxy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxy" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxyx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxyy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xxzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyx" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyxx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyxy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyy" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyyx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyyy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xyzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "xzzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxx" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxxx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxxy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxy" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxyx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxyy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yxzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyx" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyxx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyxy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyy" Geomancy.Vec2.Vec2 Geomancy.Vec3.Vec3
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyyx" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyyy" Geomancy.Vec2.Vec2 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yyzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "yzzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zxzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zyzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzxx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzxy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzxz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzyx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzyy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzyz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzzx" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzzy" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Swizzle.Vec.Up: instance GHC.Records.HasField "zzzz" Geomancy.Vec3.Vec3 Geomancy.Vec4.Vec4
+ Geomancy.Transform: instance GHC.Classes.Eq Geomancy.Transform.Transform
+ Geomancy.U64Vec2: convert :: Coercible v U64Vec2 => (Word64 -> a) -> (a -> a -> r) -> v -> r
+ Geomancy.U64Vec2: data U64Vec2
+ Geomancy.U64Vec2: dot :: U64Vec2 -> U64Vec2 -> Word64
+ Geomancy.U64Vec2: fromTuple :: (Word64, Word64) -> U64Vec2
+ Geomancy.U64Vec2: instance Codec.Serialise.Class.Serialise Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Control.DeepSeq.NFData Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Data.MonoTraversable.MonoFunctor Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Data.MonoTraversable.MonoPointed Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Foreign.Storable.Storable Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance GHC.Classes.Eq Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance GHC.Classes.Ord Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance GHC.Ix.Ix Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance GHC.Num.Num Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance GHC.Records.HasField "x" Geomancy.U64Vec2.U64Vec2 GHC.Word.Word64
+ Geomancy.U64Vec2: instance GHC.Records.HasField "y" Geomancy.U64Vec2.U64Vec2 GHC.Word.Word64
+ Geomancy.U64Vec2: instance GHC.Show.Show Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Geomancy.Elementwise.Elementwise Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Graphics.Gl.Block.Block Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: instance Language.Haskell.TH.Syntax.Lift Geomancy.U64Vec2.U64Vec2
+ Geomancy.U64Vec2: pattern WithU64Vec2 :: Word64 -> Word64 -> U64Vec2
+ Geomancy.U64Vec2: u64vec2 :: Word64 -> Word64 -> U64Vec2
+ Geomancy.U64Vec2: withU64Vec2 :: U64Vec2 -> (Word64 -> Word64 -> r) -> r
+ Geomancy.U64Vec3: Packed :: U64Vec3 -> Packed
+ Geomancy.U64Vec3: [unPacked] :: Packed -> U64Vec3
+ Geomancy.U64Vec3: convert :: Coercible v U64Vec3 => (Word64 -> a) -> (a -> a -> a -> r) -> v -> r
+ Geomancy.U64Vec3: data U64Vec3
+ Geomancy.U64Vec3: dot :: U64Vec3 -> U64Vec3 -> Word64
+ Geomancy.U64Vec3: fromTuple :: (Word64, Word64, Word64) -> U64Vec3
+ Geomancy.U64Vec3: instance Codec.Serialise.Class.Serialise Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Control.DeepSeq.NFData Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance Control.DeepSeq.NFData Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Data.MonoTraversable.MonoFunctor Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Data.MonoTraversable.MonoPointed Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Foreign.Storable.Storable Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance Foreign.Storable.Storable Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance GHC.Classes.Eq Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance GHC.Classes.Eq Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance GHC.Classes.Ord Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance GHC.Classes.Ord Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance GHC.Ix.Ix Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance GHC.Num.Num Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance GHC.Num.Num Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance GHC.Records.HasField "x" Geomancy.U64Vec3.Packed GHC.Word.Word64
+ Geomancy.U64Vec3: instance GHC.Records.HasField "x" Geomancy.U64Vec3.U64Vec3 GHC.Word.Word64
+ Geomancy.U64Vec3: instance GHC.Records.HasField "y" Geomancy.U64Vec3.Packed GHC.Word.Word64
+ Geomancy.U64Vec3: instance GHC.Records.HasField "y" Geomancy.U64Vec3.U64Vec3 GHC.Word.Word64
+ Geomancy.U64Vec3: instance GHC.Records.HasField "z" Geomancy.U64Vec3.Packed GHC.Word.Word64
+ Geomancy.U64Vec3: instance GHC.Records.HasField "z" Geomancy.U64Vec3.U64Vec3 GHC.Word.Word64
+ Geomancy.U64Vec3: instance GHC.Show.Show Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance GHC.Show.Show Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Geomancy.Elementwise.Elementwise Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Graphics.Gl.Block.Block Geomancy.U64Vec3.Packed
+ Geomancy.U64Vec3: instance Graphics.Gl.Block.Block Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance Language.Haskell.TH.Syntax.Lift Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: instance WebColor.Labels.IsWebColor s => GHC.OverloadedLabels.IsLabel s Geomancy.U64Vec3.U64Vec3
+ Geomancy.U64Vec3: newtype Packed
+ Geomancy.U64Vec3: packed :: Word64 -> Word64 -> Word64 -> Packed
+ Geomancy.U64Vec3: pattern WithU64Vec3 :: Word64 -> Word64 -> Word64 -> U64Vec3
+ Geomancy.U64Vec3: u64vec3 :: Word64 -> Word64 -> Word64 -> U64Vec3
+ Geomancy.U64Vec3: withU64Vec3 :: U64Vec3 -> (Word64 -> Word64 -> Word64 -> r) -> r
+ Geomancy.U64Vec4: convert :: Coercible v U64Vec4 => (Word64 -> a) -> (a -> a -> a -> a -> r) -> v -> r
+ Geomancy.U64Vec4: data U64Vec4
+ Geomancy.U64Vec4: dot :: U64Vec4 -> U64Vec4 -> Word64
+ Geomancy.U64Vec4: fromTuple :: (Word64, Word64, Word64, Word64) -> U64Vec4
+ Geomancy.U64Vec4: instance Codec.Serialise.Class.Serialise Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Control.DeepSeq.NFData Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Data.MonoTraversable.MonoFunctor Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Data.MonoTraversable.MonoPointed Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Foreign.Storable.Storable Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance GHC.Classes.Eq Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance GHC.Classes.Ord Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance GHC.Ix.Ix Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance GHC.Num.Num Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance GHC.Records.HasField "w" Geomancy.U64Vec4.U64Vec4 GHC.Word.Word64
+ Geomancy.U64Vec4: instance GHC.Records.HasField "x" Geomancy.U64Vec4.U64Vec4 GHC.Word.Word64
+ Geomancy.U64Vec4: instance GHC.Records.HasField "y" Geomancy.U64Vec4.U64Vec4 GHC.Word.Word64
+ Geomancy.U64Vec4: instance GHC.Records.HasField "z" Geomancy.U64Vec4.U64Vec4 GHC.Word.Word64
+ Geomancy.U64Vec4: instance GHC.Show.Show Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Geomancy.Elementwise.Elementwise Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Graphics.Gl.Block.Block Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: instance Language.Haskell.TH.Syntax.Lift Geomancy.U64Vec4.U64Vec4
+ Geomancy.U64Vec4: pattern WithU64Vec4 :: Word64 -> Word64 -> Word64 -> Word64 -> U64Vec4
+ Geomancy.U64Vec4: u64vec4 :: Word64 -> Word64 -> Word64 -> Word64 -> U64Vec4
+ Geomancy.U64Vec4: withU64Vec4 :: U64Vec4 -> (Word64 -> Word64 -> Word64 -> Word64 -> r) -> r
+ Geomancy.UVec2: instance GHC.Records.HasField "x" Geomancy.UVec2.UVec2 GHC.Word.Word32
+ Geomancy.UVec2: instance GHC.Records.HasField "y" Geomancy.UVec2.UVec2 GHC.Word.Word32
+ Geomancy.UVec3: instance GHC.Records.HasField "x" Geomancy.UVec3.Packed GHC.Word.Word32
+ Geomancy.UVec3: instance GHC.Records.HasField "x" Geomancy.UVec3.UVec3 GHC.Word.Word32
+ Geomancy.UVec3: instance GHC.Records.HasField "y" Geomancy.UVec3.Packed GHC.Word.Word32
+ Geomancy.UVec3: instance GHC.Records.HasField "y" Geomancy.UVec3.UVec3 GHC.Word.Word32
+ Geomancy.UVec3: instance GHC.Records.HasField "z" Geomancy.UVec3.Packed GHC.Word.Word32
+ Geomancy.UVec3: instance GHC.Records.HasField "z" Geomancy.UVec3.UVec3 GHC.Word.Word32
+ Geomancy.UVec4: instance GHC.Records.HasField "w" Geomancy.UVec4.UVec4 GHC.Word.Word32
+ Geomancy.UVec4: instance GHC.Records.HasField "x" Geomancy.UVec4.UVec4 GHC.Word.Word32
+ Geomancy.UVec4: instance GHC.Records.HasField "y" Geomancy.UVec4.UVec4 GHC.Word.Word32
+ Geomancy.UVec4: instance GHC.Records.HasField "z" Geomancy.UVec4.UVec4 GHC.Word.Word32
+ Geomancy.Vec2: instance GHC.Records.HasField "x" Geomancy.Vec2.Vec2 GHC.Types.Float
+ Geomancy.Vec2: instance GHC.Records.HasField "y" Geomancy.Vec2.Vec2 GHC.Types.Float
+ Geomancy.Vec3: instance GHC.Records.HasField "x" Geomancy.Vec3.Packed GHC.Types.Float
+ Geomancy.Vec3: instance GHC.Records.HasField "x" Geomancy.Vec3.Vec3 GHC.Types.Float
+ Geomancy.Vec3: instance GHC.Records.HasField "y" Geomancy.Vec3.Packed GHC.Types.Float
+ Geomancy.Vec3: instance GHC.Records.HasField "y" Geomancy.Vec3.Vec3 GHC.Types.Float
+ Geomancy.Vec3: instance GHC.Records.HasField "z" Geomancy.Vec3.Packed GHC.Types.Float
+ Geomancy.Vec3: instance GHC.Records.HasField "z" Geomancy.Vec3.Vec3 GHC.Types.Float
+ Geomancy.Vec4: instance GHC.Records.HasField "w" Geomancy.Vec4.Vec4 GHC.Types.Float
+ Geomancy.Vec4: instance GHC.Records.HasField "x" Geomancy.Vec4.Vec4 GHC.Types.Float
+ Geomancy.Vec4: instance GHC.Records.HasField "y" Geomancy.Vec4.Vec4 GHC.Types.Float
+ Geomancy.Vec4: instance GHC.Records.HasField "z" Geomancy.Vec4.Vec4 GHC.Types.Float
+ Geomancy.Vulkan.DProjection: orthoRH :: Double -> Double -> Double -> Double -> DTransform
+ Geomancy.Vulkan.DProjection: reverseDepthOrthoRH :: Double -> Double -> Double -> Double -> DTransform
+ Geomancy.Vulkan.DProjection: reverseDepthRH :: Double -> Double -> Double -> Double -> DTransform
+ Geomancy.Vulkan.DView: lookAtRH :: DVec3 -> DVec3 -> DVec3 -> DTransform
+ Geomancy.Vulkan.DView: lookAtRH_ :: DVec3 -> DVec3 -> DTransform
- Geomancy.Point: distance :: VectorSpace v Float => Point v -> Point v -> Float
+ Geomancy.Point: distance :: (Floating a, VectorSpace v a) => Point v -> Point v -> a
- Geomancy.Point: lerp :: VectorSpace v Float => Point v -> Point v -> Float -> Point v
+ Geomancy.Point: lerp :: (Num a, VectorSpace v a) => Point v -> Point v -> a -> Point v
- Geomancy.Point: qd :: VectorSpace v Float => Point v -> Point v -> Float
+ Geomancy.Point: qd :: (Floating a, VectorSpace v a) => Point v -> Point v -> a
Files
- ChangeLog.md +57/−0
- LICENSE +1/−1
- README.md +36/−38
- bench/Bench/Common.hs +15/−0
- bench/Bench/DMat4.hs +69/−0
- bench/Bench/DQuaternion.hs +70/−0
- bench/Bench/Mat4.hs +69/−0
- bench/Bench/Quaternion.hs +49/−0
- bench/Main.hs +15/−80
- cbits/dmat4.c +153/−0
- cbits/mat4.c +10/−10
- geomancy.cabal +83/−6
- src/Geomancy.hs +77/−1
- src/Geomancy/DMat4.hs +351/−0
- src/Geomancy/DMat4/Internal.hs +392/−0
- src/Geomancy/DQuaternion.hs +358/−0
- src/Geomancy/DTransform.hs +226/−0
- src/Geomancy/DTransform/Tree.hs +132/−0
- src/Geomancy/DVec2.hs +340/−0
- src/Geomancy/DVec3.hs +510/−0
- src/Geomancy/DVec4.hs +516/−0
- src/Geomancy/I64Vec2.hs +255/−0
- src/Geomancy/I64Vec3.hs +339/−0
- src/Geomancy/I64Vec4.hs +288/−0
- src/Geomancy/IVec2.hs +11/−0
- src/Geomancy/IVec3.hs +31/−3
- src/Geomancy/IVec4.hs +21/−1
- src/Geomancy/Mat4/Internal.hs +63/−28
- src/Geomancy/Point.hs +37/−4
- src/Geomancy/Quaternion.hs +14/−4
- src/Geomancy/Swizzle.hs +83/−1513
- src/Geomancy/Swizzle/DVec/Down.hs +369/−0
- src/Geomancy/Swizzle/DVec/Extend.hs +45/−0
- src/Geomancy/Swizzle/DVec/Shuffle.hs +1161/−0
- src/Geomancy/Swizzle/DVec/Up.hs +433/−0
- src/Geomancy/Swizzle/I64Vec/Down.hs +369/−0
- src/Geomancy/Swizzle/I64Vec/Extend.hs +45/−0
- src/Geomancy/Swizzle/I64Vec/Shuffle.hs +1161/−0
- src/Geomancy/Swizzle/I64Vec/Up.hs +433/−0
- src/Geomancy/Swizzle/IVec/Down.hs +369/−0
- src/Geomancy/Swizzle/IVec/Extend.hs +45/−0
- src/Geomancy/Swizzle/IVec/Shuffle.hs +1161/−0
- src/Geomancy/Swizzle/IVec/Up.hs +433/−0
- src/Geomancy/Swizzle/U64Vec/Down.hs +369/−0
- src/Geomancy/Swizzle/U64Vec/Extend.hs +45/−0
- src/Geomancy/Swizzle/U64Vec/Shuffle.hs +1161/−0
- src/Geomancy/Swizzle/U64Vec/Up.hs +433/−0
- src/Geomancy/Swizzle/UVec/Down.hs +369/−0
- src/Geomancy/Swizzle/UVec/Extend.hs +45/−0
- src/Geomancy/Swizzle/UVec/Shuffle.hs +1161/−0
- src/Geomancy/Swizzle/UVec/Up.hs +433/−0
- src/Geomancy/Swizzle/Vec/Down.hs +369/−0
- src/Geomancy/Swizzle/Vec/Extend.hs +45/−0
- src/Geomancy/Swizzle/Vec/Shuffle.hs +1161/−0
- src/Geomancy/Swizzle/Vec/Up.hs +433/−0
- src/Geomancy/Transform.hs +1/−1
- src/Geomancy/U64Vec2.hs +255/−0
- src/Geomancy/U64Vec3.hs +349/−0
- src/Geomancy/U64Vec4.hs +288/−0
- src/Geomancy/UVec2.hs +11/−0
- src/Geomancy/UVec3.hs +25/−0
- src/Geomancy/UVec4.hs +19/−0
- src/Geomancy/Vec2.hs +10/−0
- src/Geomancy/Vec3.hs +25/−0
- src/Geomancy/Vec4.hs +86/−31
- src/Geomancy/Vulkan/DProjection.hs +51/−0
- src/Geomancy/Vulkan/DView.hs +38/−0
- test/Main.hs +38/−0
- test/Spec.hs +0/−430
- test/Spec/DMat4.hs +159/−0
- test/Spec/DQuaternion.hs +180/−0
- test/Spec/DTransform.hs +138/−0
- test/Spec/DVec.hs +86/−0
- test/Spec/Fusion.hs +258/−0
- test/Spec/Mat4.hs +88/−0
- test/Spec/Point.hs +30/−0
- test/Spec/Quaternion.hs +143/−0
- test/Spec/Storable.hs +87/−0
- test/Spec/Swizzle.hs +3114/−0
- test/Spec/Transform.hs +105/−0
- test/Spec/Vec4.hs +57/−0
- test/Spec/Vec64.hs +94/−0
- test/Spec/Vulkan.hs +130/−0
- test/Support/Ball.hs +265/−0
- test/Support/Fixtures.hs +116/−0
- test/Support/Gen.hs +168/−0
- test/Support/Linear.hs +69/−0
- test/Support/Property.hs +30/−0
- test/Support/Reference/Linear.hs +20/−0
- test/Support/Reference/Mat4.hs +140/−0
- test/Support/Reference/Quaternion.hs +62/−0
- test/Support/Reference/Transform.hs +107/−0
- test/Support/Reference/Vec3.hs +31/−0
- test/Support/Reference/Vulkan.hs +58/−0
- test/Support/Swizzle.hs +127/−0
ChangeLog.md view
@@ -1,5 +1,62 @@ # Changelog for geomancy +## 0.4.0.0++A generally safe upgrade, but quite a bit of changes across the board.++- Added double-precision `DVec2`, `DVec3` (with `Packed`), `DVec4`, `DMat4` and `DQuaternion`.+ Includes SSE2/NEON kernels for `DMat4` products and `DMat4 !* DVec4`.+- Added `DTransform` (with `DTransform.Tree`), `Vulkan.DProjection` and `Vulkan.DView`.+ Compose in double and convert with `fromTransform`/`toTransform` to keep precision far from the origin.+- Added `DPoint2`, `DPoint3`, `DPoint3P` and `DPoint4`.+ `Point`'s `AffineSpace`, `qd`, `distance` and `lerp` now work over any scalar, not just `Float`.+- Added 64-bit integer vectors `I64Vec2`, `I64Vec3` (with `Packed`), `I64Vec4`,+ `U64Vec2`, `U64Vec3` (with `Packed`), `U64Vec4`.+- Added `fromVecN`/`toVecN`, `fromMat4`/`toMat4` and `fromQuaternion`/`toQuaternion`+ for single-precision conversions.+- Added `HasField` instances for the lanes of every vector type, for `v.x`, `v.y`, `v.z`, `v.w` with `OverloadedRecordDot`.+ * `Packed` vectors have them too, and a `Point` forwards each lane to the vector it wraps.+ * Optimized code is the same as with `withVecN`: one unpack, and only the lanes used get read.+- Added rewrite rules that fuse `Vec4` and `DVec4` producers into their consumers.+ * Intermediate vectors in expressions like `dot (a + b) c`, `lerp t a b` or `(a + b) * c - d` are no longer allocated.+ * Folds over such expressions got 20-30% faster.+ * When the rules fire, only the lanes the consumer uses are evaluated, so a fused expression may avoid forcing an undefined lane.+- Added `HasField` swizzles for every vector family, in `Geomancy.Swizzle.<Family>.Shuffle`, `.Down` and `.Up`+ (families: `Vec`, `DVec`, `IVec`, `UVec`, `I64Vec`, `U64Vec`).+ * `Shuffle` keeps the size (`v.zyx`, and the identity `v.xyz`), `Down` narrows (`v.xy` of a `Vec4`), `Up` widens (`v.xyxy` of a `Vec2`).+ * The instances are orphans. `import Geomancy.Swizzle ()` brings all of them,+ or import just the modules you need, like `import Geomancy.Swizzle.Vec.Down ()`.+ * Chains like `v.wzyx.zyx.yx.y` compile to a single lane read.+- Added `Extend` swizzles that widen a vector with constant lanes, in `Geomancy.Swizzle.<Family>.Extend`.+ * The source lanes stay in order and get `0` or `1` appended: `flatPos.xy01`, `pos.xyz1`, `uv.xy0`.+ * Masks compose from extending and narrowing: `white.xyz0.wyz` is `(0, y, z)`.+- Changed `Geomancy.Swizzle` labels to use the `HasField` swizzles, so `v .@ #xzy` works for every family.++- Modified Quaternion rotation to use a unit shortcut.+ * The contract was already "use normalized" quaternions for rotations.+ * Float got a modest speedup, Double is twice-ish as fast. Both are faster than Linear.++- Added `Eq` for `Mat4`, `DMat4`, `Transform` and `DTransform`.+ Elements are compared pointwise with IEEE semantics, like the derived `Eq` of `Vec3`:+ `0 == -0` and a matrix containing `NaN` is not equal to itself.+- Changed `Eq` and `Ord` for `Vec4` from bytewise to pointwise, matching `Vec3`.+ * `Ord` is now lexicographic over x, y, z, w. Previously it compared the raw bytes, which is not a numeric order.+ * `Map`/`Set` keyed by `Vec4` will order differently, and keys differing only in the sign of zero now collapse.+ + Keys containing `NaN` are no longer found by lookups, since `Ord` is no longer total for them.+ + Basically, don't use floats for keys.++- Fixed `abs` for `IVec3` and `IVec4`, which returned the vector unchanged.+- Fixed `Block` layout for `IVec3.Packed`, whose `alignment140` and `sizeOf140` were swapped in 0.3.1.0 (now 16 and 12).+- Fixed `peek` for `Vec4` and `Mat4` returning the wrong element under optimization.+ * `Data.Vector.Storable` indexing runs `peek` with a shared `realWorld#` token, which let GHC merge the+ buffer allocations of neighbouring reads, so every read in a strict context got the last element.+ * `peek` now loads on the caller's token and builds the value in a private buffer.+ * `Vec4` `peek` and `poke` are about twice as fast, since the 16-byte copies they replace were done bytewise.++- Changed `Vec4` and `Mat4` storage from aligned pinned to regular unpinned byte arrays, like the new `DVec4` and `DMat4`.+ * SIMD kernels now use unaligned loads and stores.+ * Code reaching into the exported constructors must not take `byteArrayContents#` or pass the array to `safe` foreign calls, since the GC may now move it.+ ## 0.3.1.0 - Fixed Block.sizeOf40 for Packed 3-vectors (was 16, now 12).
LICENSE view
@@ -1,4 +1,4 @@-Copyright Alexander Bondarenko (c) 2020+Copyright IC Rainbow (c) 2020-2026 All rights reserved.
README.md view
@@ -8,56 +8,54 @@ ## The Numbers -Storing a list of 1000 transformations (e.g. rendering instance data):+Storing a list of transformations (e.g. rendering instance data): ```-benchmarking 4x4 poke/1000/geomancy-time 11.76 μs (11.66 μs .. 11.92 μs)- 0.999 R² (0.998 R² .. 1.000 R²)-mean 11.75 μs (11.69 μs .. 11.86 μs)-std dev 283.4 ns (199.0 ns .. 399.0 ns)-variance introduced by outliers: 26% (moderately inflated)+ poke+ 10+ geomancy: OK+ 42.3 ns ± 1.4 ns, 0.47x+ linear: OK+ 90.5 ns ± 3.1 ns+ linear/T: OK+ 81.6 ns ± 2.7 ns+...+ 1000+ geomancy: OK+ 2.85 μs ± 37 ns, 0.36x+ linear: OK+ 7.93 μs ± 132 ns+ linear/T: OK+ 7.08 μs ± 348 ns ``` -If you're willing to adjust your shaders, it's only 2.4 times slower.+Folding down a `gloss`-style scene tree is where it is all started: ```-benchmarking 4x4 poke/1000/linear-time 28.29 μs (28.21 μs .. 28.38 μs)- 1.000 R² (1.000 R² .. 1.000 R²)-mean 28.40 μs (28.34 μs .. 28.50 μs)-std dev 267.4 ns (145.5 ns .. 419.9 ns)+ multiply+ 2+ geomancy: OK+ 12.3 ns ± 164 ps, 0.34x+ linear: OK+ 36.1 ns ± 1.3 ns+...+ 1000+ geomancy: OK+ 7.71 μs ± 93 ns, 0.23x+ linear: OK+ 34.0 μs ± 1.3 μs ``` -Keeping your shaders straight make the affair 6.1x slower.--```-benchmarking 4x4 poke/1000/linear/T-time 73.70 μs (73.06 μs .. 74.49 μs)- 1.000 R² (0.999 R² .. 1.000 R²)-mean 72.77 μs (72.50 μs .. 73.22 μs)-std dev 1.129 μs (793.5 ns .. 1.580 μs)-```+Add that time to the poking that'll follow. -Folding down a `gloss`-style scene graph is where it is all started:+Sure, it is in the lower microseconds range, but this budget can be used elsewhere. -```-benchmarking 4x4 multiply/1000/geomancy-time 20.79 μs (20.77 μs .. 20.83 μs)- 1.000 R² (1.000 R² .. 1.000 R²)-mean 20.80 μs (20.78 μs .. 20.83 μs)-std dev 76.71 ns (60.01 ns .. 99.06 ns)+### Benchmarking and comparing -benchmarking 4x4 multiply/1000/linear-time 173.9 μs (173.6 μs .. 174.4 μs)- 1.000 R² (1.000 R² .. 1.000 R²)-mean 173.5 μs (173.2 μs .. 174.4 μs)-std dev 1.733 μs (727.8 ns .. 3.422 μs)+```sh+stack bench --ba '--csv baseline.csv --stdev 2 --timeout 120'+stack bench --ba '--baseline baseline.csv --fail-if-slower 5' ```--Add that time to the poking that'll follow.--Sure, it is in the lower microseconds range, but this budget can be used elsewhere. ## Conventions
+ bench/Bench/Common.hs view
@@ -0,0 +1,15 @@+module Bench.Common+ ( clones+ , chain+ ) where++import qualified Data.List as List++clones :: Applicative f => Int -> a -> b -> f ([a], [b])+clones n geo lin = (,) <$> genMat4s <*> genM44s+ where+ genMat4s = pure $! replicate n geo+ genM44s = pure $! replicate n lin++chain :: (a -> a) -> a -> Int -> a+chain f x0 n = List.foldl' (\x _ -> f x) x0 [1 .. n]
+ bench/Bench/DMat4.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE BlockArguments #-}++module Bench.DMat4 (benchmarks) where++import Test.Tasty.Bench++import Data.List (foldl1')+import qualified Foreign++import qualified Geomancy+import qualified Geomancy.DMat4++import qualified Linear+import qualified Linear.Matrix++import Bench.Common (clones)++benchmarks :: Benchmark+benchmarks = bgroup "dmat4"+ [ bgroup "transpose" dmat4transpose++ , bgroup "multiply" $ flip map [2, 3, 10, 100, 1000] \size ->+ env (clones size mempty Linear.identity) $+ dmat4multiply size++ , bgroup "poke" $ flip map [10, 100, 1000, 10000] \size ->+ env (clones size mempty Linear.identity) $+ dmat4poke size+ ]++dmat4transpose :: [Benchmark]+dmat4transpose =+ [ bench "geomancy" $ whnf Geomancy.DMat4.transpose mempty+ , bench "linear" $ whnf Linear.Matrix.transpose (Linear.identity :: Linear.M44 Double)+ ]++dmat4multiply+ :: Int+ -> ([Geomancy.DMat4], [Linear.M44 Double])+ -> Benchmark+dmat4multiply size ~(dmat4s, m44s) = bgroup (show size)+ [ bench "geomancy" $ whnf multGeomancy dmat4s+ , bench "linear" $ whnf multLinear m44s+ ]+ where+ multGeomancy = foldl1' (<>)+ multLinear = foldl1' (Linear.!*!)++dmat4poke+ :: Int+ -> ([Geomancy.DMat4], [Linear.M44 Double])+ -> Benchmark+dmat4poke size ~(dmat4s, m44s) = bgroup (show size)+ [ bench "geomancy" $ nfIO pokeGeomancy+ , bench "linear" $ nfIO pokeLinear+ , bench "linear/T" $ nfIO pokeLinearTranspose+ ]+ where+ pokeGeomancy =+ Foreign.withArray dmat4s \_ptr ->+ pure ()++ pokeLinear =+ Foreign.withArray m44s \_ptr ->+ pure ()++ pokeLinearTranspose =+ Foreign.withArray (map Linear.transpose m44s) \_ptr ->+ pure ()
+ bench/Bench/DQuaternion.hs view
@@ -0,0 +1,70 @@+{-# LANGUAGE BlockArguments #-}++module Bench.DQuaternion (benchmarks) where++import Test.Tasty.Bench++import Data.List (foldl1')++import qualified Geomancy+import qualified Geomancy.DQuaternion++import qualified Linear+import qualified Linear.Quaternion++import Bench.Common (chain, clones)++benchmarks :: Benchmark+benchmarks = bgroup "dquaternion"+ [ bgroup "euler" dquatFromEuler+ , bgroup "axisAngle" dquatAxisAngle+ , bgroup "multiply" $ flip map [10, 100, 1000] \size ->+ env (clones size benchDQuat benchLQuat) $+ dquatMultiply size+ , bgroup "rotate" $ flip map [10, 100, 1000] \size ->+ env (clones size (Geomancy.dvec3 1 2 3) (Linear.V3 1 2 3)) $+ dquatRotate size+ , bgroup "rotate chain" dquatRotateChain+ ]++dquatFromEuler :: [Benchmark]+dquatFromEuler =+ [ bench "fused" $ whnf (\a -> Geomancy.DQuaternion.intrinsic a a a) (pi/3)+ , bench "composed" $ whnf (\a -> Geomancy.DQuaternion.extrinsic a a a) (pi/3)+ ]++dquatAxisAngle :: [Benchmark]+dquatAxisAngle =+ [ bench "geomancy" $ whnf (Geomancy.DQuaternion.axisAngle (Geomancy.dvec3 1 2 3)) (pi/7)+ , bench "linear" $ whnf (Linear.Quaternion.axisAngle (Linear.V3 1 2 3 :: Linear.V3 Double)) (pi/7)+ ]++benchDQuat :: Geomancy.DQuaternion+benchDQuat = Geomancy.DQuaternion.axisAngle (Geomancy.dvec3 1 2 3) (pi/7)++benchLQuat :: Linear.Quaternion.Quaternion Double+benchLQuat = Linear.Quaternion.axisAngle (Linear.V3 1 2 3) (pi/7)++dquatMultiply+ :: Int+ -> ([Geomancy.DQuaternion], [Linear.Quaternion.Quaternion Double])+ -> Benchmark+dquatMultiply size ~(dquats, lquats) = bgroup (show size)+ [ bench "geomancy" $ whnf (foldl1' (*)) dquats+ , bench "linear" $ whnf (foldl1' (*)) lquats+ ]++dquatRotate+ :: Int+ -> ([Geomancy.DVec3], [Linear.V3 Double])+ -> Benchmark+dquatRotate size ~(dvecs, lvecs) = bgroup (show size)+ [ bench "geomancy" $ nf (map (Geomancy.DQuaternion.rotate benchDQuat)) dvecs+ , bench "linear" $ nf (map (Linear.Quaternion.rotate benchLQuat)) lvecs+ ]++dquatRotateChain :: [Benchmark]+dquatRotateChain =+ [ bench "geomancy" $ whnf (chain (Geomancy.DQuaternion.rotate benchDQuat) (Geomancy.dvec3 1 2 3)) 1000+ , bench "linear" $ whnf (chain (Linear.Quaternion.rotate benchLQuat) (Linear.V3 1 2 3)) 1000+ ]
+ bench/Bench/Mat4.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE BlockArguments #-}++module Bench.Mat4 (benchmarks) where++import Test.Tasty.Bench++import Data.List (foldl1')+import qualified Foreign++import qualified Geomancy+import qualified Geomancy.Mat4++import qualified Linear+import qualified Linear.Matrix++import Bench.Common (clones)++benchmarks :: Benchmark+benchmarks = bgroup "mat4"+ [ bgroup "transpose" mat4transpose++ , bgroup "multiply" $ flip map [2, 3, 10, 100, 1000] \size ->+ env (clones size mempty Linear.identity) $+ mat4multiply size++ , bgroup "poke" $ flip map [10, 100, 1000, 10000] \size ->+ env (clones size mempty Linear.identity) $+ mat4poke size+ ]++mat4transpose :: [Benchmark]+mat4transpose =+ [ bench "geomancy" $ whnf Geomancy.Mat4.transpose mempty+ , bench "linear" $ whnf Linear.Matrix.transpose (Linear.identity :: Linear.M44 Float)+ ]++mat4multiply+ :: Int+ -> ([Geomancy.Mat4], [Linear.M44 Float])+ -> Benchmark+mat4multiply size ~(mat4s, m44s) = bgroup (show size)+ [ bench "geomancy" $ whnf multGeomancy mat4s+ , bench "linear" $ whnf multLinear m44s+ ]+ where+ multGeomancy = foldl1' (<>)+ multLinear = foldl1' (Linear.!*!)++mat4poke+ :: Int+ -> ([Geomancy.Mat4], [Linear.M44 Float])+ -> Benchmark+mat4poke size ~(mat4s, m44s) = bgroup (show size)+ [ bench "geomancy" $ nfIO pokeGeomancy -- mat4s+ , bench "linear" $ nfIO pokeLinear -- m44s+ , bench "linear/T" $ nfIO pokeLinearTranspose+ ]+ where+ pokeGeomancy =+ Foreign.withArray mat4s \_ptr ->+ pure ()++ pokeLinear =+ Foreign.withArray m44s \_ptr ->+ pure ()++ pokeLinearTranspose =+ Foreign.withArray (map Linear.transpose m44s) \_ptr ->+ pure ()
+ bench/Bench/Quaternion.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE BlockArguments #-}++module Bench.Quaternion (benchmarks) where++import Test.Tasty.Bench++import qualified Geomancy+import qualified Geomancy.Quaternion++import qualified Linear+import qualified Linear.Quaternion++import Bench.Common (chain, clones)++benchmarks :: Benchmark+benchmarks = bgroup "quaternion"+ [ bgroup "euler" quatFromEuler+ , bgroup "rotate" $ flip map [10, 100, 1000] \size ->+ env (clones size (Geomancy.vec3 1 2 3) (Linear.V3 1 2 3)) $+ quatRotate size+ , bgroup "rotate chain" quatRotateChain+ ]++quatFromEuler :: [Benchmark]+quatFromEuler =+ [ bench "fused" $ whnf (\a -> Geomancy.Quaternion.intrinsic a a a) (pi/3)+ , bench "composed" $ whnf (\a -> Geomancy.Quaternion.extrinsic a a a) (pi/3)+ ]++benchQuat :: Geomancy.Quaternion+benchQuat = Geomancy.Quaternion.axisAngle (Geomancy.vec3 1 2 3) (pi/7)++benchLQuatF :: Linear.Quaternion.Quaternion Float+benchLQuatF = Linear.Quaternion.axisAngle (Linear.V3 1 2 3) (pi/7)++quatRotate+ :: Int+ -> ([Geomancy.Vec3], [Linear.V3 Float])+ -> Benchmark+quatRotate size ~(vecs, lvecs) = bgroup (show size)+ [ bench "geomancy" $ nf (map (Geomancy.Quaternion.rotate benchQuat)) vecs+ , bench "linear" $ nf (map (Linear.Quaternion.rotate benchLQuatF)) lvecs+ ]++quatRotateChain :: [Benchmark]+quatRotateChain =+ [ bench "geomancy" $ whnf (chain (Geomancy.Quaternion.rotate benchQuat) (Geomancy.vec3 1 2 3)) 1000+ , bench "linear" $ whnf (chain (Linear.Quaternion.rotate benchLQuatF) (Linear.V3 1 2 3)) 1000+ ]
bench/Main.hs view
@@ -1,86 +1,21 @@-{-# LANGUAGE BlockArguments #-}-{-# LANGUAGE TypeApplications #-}--module Main where--import Criterion.Main--import Data.List (foldl1')-import qualified Foreign+module Main (main) where -import qualified Geomancy-import qualified Geomancy.Mat4-import qualified Geomancy.Quaternion+import Test.Tasty.Bench (Benchmark, bcompare, defaultMain, locateBenchmark, mapLeafBenchmarks)+import Test.Tasty.Patterns.Printer (printAwkExpr) -import qualified Linear-import qualified Linear.Matrix+import qualified Bench.DMat4+import qualified Bench.DQuaternion+import qualified Bench.Mat4+import qualified Bench.Quaternion main :: IO ()-main = defaultMain- [ bgroup "4x4 transpose"- mat4transpose-- , bgroup "4x4 multiply" $ flip map [2, 3, 10, 100, 1000] \size ->- env (clones size mempty Linear.identity) $- mat4multiply size-- , bgroup "4x4 poke" $ flip map [10, 100, 1000, 10000] \size ->- env (clones size mempty Linear.identity) $- mat4poke size-- , bgroup "quaternion"- [ bgroup "euler" quatFromEuler- ]- ]--mat4transpose :: [Benchmark]-mat4transpose =- [ bench "geomancy" $ whnf Geomancy.Mat4.transpose mempty- , bench "linear" $ whnf Linear.Matrix.transpose (Linear.identity :: Linear.M44 Float)+main = defaultMain $ map (mapLeafBenchmarks vsLinear)+ [ Bench.Mat4.benchmarks+ , Bench.DMat4.benchmarks+ , Bench.Quaternion.benchmarks+ , Bench.DQuaternion.benchmarks ] -mat4multiply- :: Int- -> ([Geomancy.Mat4], [Linear.M44 Float])- -> Benchmark-mat4multiply size ~(mat4s, m44s) = bgroup (show size)- [ bench "geomancy" $ whnf multGeomancy mat4s- , bench "linear" $ whnf multLinear m44s- ]- where- multGeomancy = foldl1' (<>)- multLinear = foldl1' (Linear.!*!)--clones :: Applicative f => Int -> a -> b -> f ([a], [b])-clones n geo lin = (,) <$> genMat4s <*> genM44s- where- genMat4s = pure $! replicate n geo- genM44s = pure $! replicate n lin--mat4poke- :: Int- -> ([Geomancy.Mat4], [Linear.M44 Float])- -> Benchmark-mat4poke size ~(mat4s, m44s) = bgroup (show size)- [ bench "geomancy" $ nfIO pokeGeomancy -- mat4s- , bench "linear" $ nfIO pokeLinear -- m44s- , bench "linear/T" $ nfIO pokeLinearTranspose- ]- where- pokeGeomancy =- Foreign.withArray mat4s \_ptr ->- pure ()-- pokeLinear =- Foreign.withArray m44s \_ptr ->- pure ()-- pokeLinearTranspose =- Foreign.withArray (map Linear.transpose m44s) \_ptr ->- pure ()--quatFromEuler :: [Benchmark]-quatFromEuler =- [ bench "fused" $ whnf (\a -> Geomancy.Quaternion.intrinsic a a a) (pi/3)- , bench "composed" $ whnf (\a -> Geomancy.Quaternion.extrinsic a a a) (pi/3)- ]+vsLinear :: [String] -> Benchmark -> Benchmark+vsLinear ("geomancy" : path) = bcompare (printAwkExpr $ locateBenchmark ("linear" : path))+vsLinear _ = id
+ cbits/dmat4.c view
@@ -0,0 +1,153 @@+#if defined(__SSE2__)++#include <emmintrin.h>++void DMat4xDMat4_SIMD(double *A, double *B, double *O) {+ __m128d row0lo = _mm_loadu_pd(&A[0]);+ __m128d row0hi = _mm_loadu_pd(&A[2]);+ __m128d row1lo = _mm_loadu_pd(&A[4]);+ __m128d row1hi = _mm_loadu_pd(&A[6]);+ __m128d row2lo = _mm_loadu_pd(&A[8]);+ __m128d row2hi = _mm_loadu_pd(&A[10]);+ __m128d row3lo = _mm_loadu_pd(&A[12]);+ __m128d row3hi = _mm_loadu_pd(&A[14]);+ for(int i=0; i<4; i++) {+ __m128d brod0 = _mm_set1_pd(B[4*i + 0]);+ __m128d brod1 = _mm_set1_pd(B[4*i + 1]);+ __m128d brod2 = _mm_set1_pd(B[4*i + 2]);+ __m128d brod3 = _mm_set1_pd(B[4*i + 3]);+ __m128d rowlo = _mm_add_pd(+ _mm_add_pd(+ _mm_mul_pd(brod0, row0lo),+ _mm_mul_pd(brod1, row1lo)),+ _mm_add_pd(+ _mm_mul_pd(brod2, row2lo),+ _mm_mul_pd(brod3, row3lo)));+ __m128d rowhi = _mm_add_pd(+ _mm_add_pd(+ _mm_mul_pd(brod0, row0hi),+ _mm_mul_pd(brod1, row1hi)),+ _mm_add_pd(+ _mm_mul_pd(brod2, row2hi),+ _mm_mul_pd(brod3, row3hi)));+ _mm_storeu_pd(&O[4*i], rowlo);+ _mm_storeu_pd(&O[4*i + 2], rowhi);+ }+}++void DMat4xDVec4_SIMD(double *M, double *V, double *O) {+ __m128d row0lo = _mm_loadu_pd(&M[0]);+ __m128d row0hi = _mm_loadu_pd(&M[2]);+ __m128d row1lo = _mm_loadu_pd(&M[4]);+ __m128d row1hi = _mm_loadu_pd(&M[6]);+ __m128d row2lo = _mm_loadu_pd(&M[8]);+ __m128d row2hi = _mm_loadu_pd(&M[10]);+ __m128d row3lo = _mm_loadu_pd(&M[12]);+ __m128d row3hi = _mm_loadu_pd(&M[14]);++ __m128d vec00 = _mm_set1_pd(V[0]);+ __m128d vec01 = _mm_set1_pd(V[1]);+ __m128d vec02 = _mm_set1_pd(V[2]);+ __m128d vec03 = _mm_set1_pd(V[3]);++ __m128d reslo = _mm_mul_pd(row0lo, vec00);+ reslo = _mm_add_pd(reslo, _mm_mul_pd(row1lo, vec01));+ reslo = _mm_add_pd(reslo, _mm_mul_pd(row2lo, vec02));+ reslo = _mm_add_pd(reslo, _mm_mul_pd(row3lo, vec03));++ __m128d reshi = _mm_mul_pd(row0hi, vec00);+ reshi = _mm_add_pd(reshi, _mm_mul_pd(row1hi, vec01));+ reshi = _mm_add_pd(reshi, _mm_mul_pd(row2hi, vec02));+ reshi = _mm_add_pd(reshi, _mm_mul_pd(row3hi, vec03));++ _mm_storeu_pd(&O[0], reslo);+ _mm_storeu_pd(&O[2], reshi);+}++#elif defined(__aarch64__)++#include <arm_neon.h>++void DMat4xDMat4_SIMD(double *A, double *B, double *O) {+ float64x2_t A0lo = vld1q_f64(&A[0]);+ float64x2_t A0hi = vld1q_f64(&A[2]);+ float64x2_t A1lo = vld1q_f64(&A[4]);+ float64x2_t A1hi = vld1q_f64(&A[6]);+ float64x2_t A2lo = vld1q_f64(&A[8]);+ float64x2_t A2hi = vld1q_f64(&A[10]);+ float64x2_t A3lo = vld1q_f64(&A[12]);+ float64x2_t A3hi = vld1q_f64(&A[14]);++ for(int i=0; i<4; i++) {+ float64x2_t Blo = vld1q_f64(&B[4*i]);+ float64x2_t Bhi = vld1q_f64(&B[4*i + 2]);++ float64x2_t Clo = vmovq_n_f64(0);+ Clo = vfmaq_laneq_f64(Clo, A0lo, Blo, 0);+ Clo = vfmaq_laneq_f64(Clo, A1lo, Blo, 1);+ Clo = vfmaq_laneq_f64(Clo, A2lo, Bhi, 0);+ Clo = vfmaq_laneq_f64(Clo, A3lo, Bhi, 1);++ float64x2_t Chi = vmovq_n_f64(0);+ Chi = vfmaq_laneq_f64(Chi, A0hi, Blo, 0);+ Chi = vfmaq_laneq_f64(Chi, A1hi, Blo, 1);+ Chi = vfmaq_laneq_f64(Chi, A2hi, Bhi, 0);+ Chi = vfmaq_laneq_f64(Chi, A3hi, Bhi, 1);++ vst1q_f64(&O[4*i], Clo);+ vst1q_f64(&O[4*i + 2], Chi);+ }+}++void DMat4xDVec4_SIMD(double *M, double *V, double *O) {+ float64x2_t M0lo = vld1q_f64(&M[0]);+ float64x2_t M0hi = vld1q_f64(&M[2]);+ float64x2_t M1lo = vld1q_f64(&M[4]);+ float64x2_t M1hi = vld1q_f64(&M[6]);+ float64x2_t M2lo = vld1q_f64(&M[8]);+ float64x2_t M2hi = vld1q_f64(&M[10]);+ float64x2_t M3lo = vld1q_f64(&M[12]);+ float64x2_t M3hi = vld1q_f64(&M[14]);++ float64x2_t Vlo = vld1q_f64(&V[0]);+ float64x2_t Vhi = vld1q_f64(&V[2]);++ float64x2_t Llo = vmovq_n_f64(0);+ Llo = vfmaq_laneq_f64(Llo, M0lo, Vlo, 0);+ Llo = vfmaq_laneq_f64(Llo, M1lo, Vlo, 1);+ Llo = vfmaq_laneq_f64(Llo, M2lo, Vhi, 0);+ Llo = vfmaq_laneq_f64(Llo, M3lo, Vhi, 1);++ float64x2_t Lhi = vmovq_n_f64(0);+ Lhi = vfmaq_laneq_f64(Lhi, M0hi, Vlo, 0);+ Lhi = vfmaq_laneq_f64(Lhi, M1hi, Vlo, 1);+ Lhi = vfmaq_laneq_f64(Lhi, M2hi, Vhi, 0);+ Lhi = vfmaq_laneq_f64(Lhi, M3hi, Vhi, 1);++ vst1q_f64(&O[0], Llo);+ vst1q_f64(&O[2], Lhi);+}++#else++void DMat4xDMat4_SIMD(double *A, double *B, double *O) {+ for(int i=0; i<4; i++) {+ for(int j=0; j<4; j++) {+ O[4*i + j] =+ (B[4*i + 0] * A[0 + j] + B[4*i + 1] * A[4 + j]) ++ (B[4*i + 2] * A[8 + j] + B[4*i + 3] * A[12 + j]);+ }+ }+}++void DMat4xDVec4_SIMD(double *M, double *V, double *O) {+ for(int j=0; j<4; j++) {+ O[j] =+ M[0 + j] * V[0] ++ M[4 + j] * V[1] ++ M[8 + j] * V[2] ++ M[12 + j] * V[3];+ }+}++#endif
cbits/mat4.c view
@@ -3,10 +3,10 @@ #include <xmmintrin.h> void Mat4xMat4_SIMD(float *A, float *B, float *O) {- __m128 row0 = _mm_load_ps(&A[0]);- __m128 row1 = _mm_load_ps(&A[4]);- __m128 row2 = _mm_load_ps(&A[8]);- __m128 row3 = _mm_load_ps(&A[12]);+ __m128 row0 = _mm_loadu_ps(&A[0]);+ __m128 row1 = _mm_loadu_ps(&A[4]);+ __m128 row2 = _mm_loadu_ps(&A[8]);+ __m128 row3 = _mm_loadu_ps(&A[12]); for(int i=0; i<4; i++) { __m128 brod0 = _mm_set1_ps(B[4*i + 0]); __m128 brod1 = _mm_set1_ps(B[4*i + 1]);@@ -19,17 +19,17 @@ _mm_add_ps( _mm_mul_ps(brod2, row2), _mm_mul_ps(brod3, row3)));- _mm_store_ps(&O[4*i], row);+ _mm_storeu_ps(&O[4*i], row); } } void Mat4xVec4_SIMD(float *M, float *V, float *O) {- __m128 row0 = _mm_load_ps(&M[0]);- __m128 row1 = _mm_load_ps(&M[4]);- __m128 row2 = _mm_load_ps(&M[8]);- __m128 row3 = _mm_load_ps(&M[12]);+ __m128 row0 = _mm_loadu_ps(&M[0]);+ __m128 row1 = _mm_loadu_ps(&M[4]);+ __m128 row2 = _mm_loadu_ps(&M[8]);+ __m128 row3 = _mm_loadu_ps(&M[12]); - __m128 vec0 = _mm_load_ps(V);+ __m128 vec0 = _mm_loadu_ps(V); __m128 vec00 = _mm_shuffle_ps(vec0, vec0, _MM_SHUFFLE(0, 0, 0, 0)); __m128 vec01 = _mm_shuffle_ps(vec0, vec0, _MM_SHUFFLE(1, 1, 1, 1));
geomancy.cabal view
@@ -1,18 +1,18 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.39.1.+-- This file has been generated from package.yaml by hpack version 0.39.6. -- -- see: https://github.com/sol/hpack name: geomancy-version: 0.3.1.0+version: 0.4.0.0 synopsis: Vectors and matrix manipulation description: Sometimes it is unavoidable you have to do stuff on CPU. Let's at least do it faster. category: Graphics author: IC Rainbow maintainer: aenor.realm@gmail.com-copyright: 2021-2025 IC Rainbow+copyright: 2020-2026 IC Rainbow license: BSD3 license-file: LICENSE build-type: Simple@@ -35,8 +35,19 @@ library exposed-modules: Geomancy+ Geomancy.DMat4+ Geomancy.DMat4.Internal+ Geomancy.DQuaternion+ Geomancy.DTransform+ Geomancy.DTransform.Tree+ Geomancy.DVec2+ Geomancy.DVec3+ Geomancy.DVec4 Geomancy.Elementwise Geomancy.Gl.Funs+ Geomancy.I64Vec2+ Geomancy.I64Vec3+ Geomancy.I64Vec4 Geomancy.Interpolate Geomancy.IVec2 Geomancy.IVec3@@ -46,9 +57,36 @@ Geomancy.Point Geomancy.Quaternion Geomancy.Swizzle+ Geomancy.Swizzle.DVec.Down+ Geomancy.Swizzle.DVec.Extend+ Geomancy.Swizzle.DVec.Shuffle+ Geomancy.Swizzle.DVec.Up+ Geomancy.Swizzle.I64Vec.Down+ Geomancy.Swizzle.I64Vec.Extend+ Geomancy.Swizzle.I64Vec.Shuffle+ Geomancy.Swizzle.I64Vec.Up+ Geomancy.Swizzle.IVec.Down+ Geomancy.Swizzle.IVec.Extend+ Geomancy.Swizzle.IVec.Shuffle+ Geomancy.Swizzle.IVec.Up+ Geomancy.Swizzle.U64Vec.Down+ Geomancy.Swizzle.U64Vec.Extend+ Geomancy.Swizzle.U64Vec.Shuffle+ Geomancy.Swizzle.U64Vec.Up+ Geomancy.Swizzle.UVec.Down+ Geomancy.Swizzle.UVec.Extend+ Geomancy.Swizzle.UVec.Shuffle+ Geomancy.Swizzle.UVec.Up+ Geomancy.Swizzle.Vec.Down+ Geomancy.Swizzle.Vec.Extend+ Geomancy.Swizzle.Vec.Shuffle+ Geomancy.Swizzle.Vec.Up Geomancy.Transform Geomancy.Transform.Tree Geomancy.Tree+ Geomancy.U64Vec2+ Geomancy.U64Vec3+ Geomancy.U64Vec4 Geomancy.UVec2 Geomancy.UVec3 Geomancy.UVec4@@ -56,6 +94,8 @@ Geomancy.Vec3 Geomancy.Vec4 Geomancy.Vector+ Geomancy.Vulkan.DProjection+ Geomancy.Vulkan.DView Geomancy.Vulkan.Projection Geomancy.Vulkan.View other-modules:@@ -65,6 +105,7 @@ ghc-options: -Wall c-sources: cbits/mat4.c+ cbits/dmat4.c build-depends: base >=4.7 && <5 , containers@@ -86,8 +127,34 @@ test-suite geomancy-test type: exitcode-stdio-1.0- main-is: Spec.hs+ main-is: Main.hs other-modules:+ Spec.DMat4+ Spec.DQuaternion+ Spec.DTransform+ Spec.DVec+ Spec.Fusion+ Spec.Mat4+ Spec.Point+ Spec.Quaternion+ Spec.Storable+ Spec.Swizzle+ Spec.Transform+ Spec.Vec4+ Spec.Vec64+ Spec.Vulkan+ Support.Ball+ Support.Fixtures+ Support.Gen+ Support.Linear+ Support.Property+ Support.Reference.Linear+ Support.Reference.Mat4+ Support.Reference.Quaternion+ Support.Reference.Transform+ Support.Reference.Vec3+ Support.Reference.Vulkan+ Support.Swizzle Paths_geomancy hs-source-dirs: test@@ -96,24 +163,34 @@ base >=4.7 && <5 , deepseq , geomancy+ , gl-block , hedgehog , linear , simple-affine-space+ , tasty+ , tasty-hedgehog+ , vector default-language: Haskell2010 benchmark geomancy-bench type: exitcode-stdio-1.0 main-is: Main.hs other-modules:+ Bench.Common+ Bench.DMat4+ Bench.DQuaternion+ Bench.Mat4+ Bench.Quaternion Paths_geomancy hs-source-dirs: bench- ghc-options: -Wall -O2 -threaded -rtsopts "-with-rtsopts=-N1 -A128m -s"+ ghc-options: -Wall -rtsopts "-with-rtsopts=-A32m -T" build-depends: base >=4.7 && <5- , criterion , deepseq , geomancy , linear , simple-affine-space+ , tasty+ , tasty-bench default-language: Haskell2010
src/Geomancy.hs view
@@ -25,6 +25,27 @@ , pattern WithVec4 , Point4 + -- ** Double-precision / float64s++ , DVec2+ , dvec2+ , withDVec2+ , pattern WithDVec2+ , DPoint2++ , DVec3+ , dvec3+ , withDVec3+ , pattern WithDVec3+ , DPoint3+ , DPoint3P++ , DVec4+ , dvec4+ , withDVec4+ , pattern WithDVec4+ , DPoint4+ -- ** Signed / int32s , IVec2@@ -59,6 +80,40 @@ , withUVec4 , pattern WithUVec4 + -- ** Signed / int64s++ , I64Vec2+ , i64vec2+ , withI64Vec2+ , pattern WithI64Vec2++ , I64Vec3+ , i64vec3+ , withI64Vec3+ , pattern WithI64Vec3++ , I64Vec4+ , i64vec4+ , withI64Vec4+ , pattern WithI64Vec4++ -- ** Unsigned / word64s++ , U64Vec2+ , u64vec2+ , withU64Vec2+ , pattern WithU64Vec2++ , U64Vec3+ , u64vec3+ , withU64Vec3+ , pattern WithU64Vec3++ , U64Vec4+ , u64vec4+ , withU64Vec4+ , pattern WithU64Vec4+ -- ** Generic maps , Elementwise(..)@@ -66,7 +121,9 @@ -- * Matrices , Mat4+ , DMat4 , Transform(..)+ , DTransform(..) -- * Other beasts @@ -74,6 +131,10 @@ , quaternion , withQuaternion + , DQuaternion+ , dquaternion+ , withDQuaternion+ -- * Spaces , Point(..)@@ -88,6 +149,10 @@ import Geomancy.Vec3 (Vec3, vec3, withVec3, pattern WithVec3) import Geomancy.Vec4 (Vec4, vec4, withVec4, pattern WithVec4) +import Geomancy.DVec2 (DVec2, dvec2, withDVec2, pattern WithDVec2)+import Geomancy.DVec3 (DVec3, dvec3, withDVec3, pattern WithDVec3)+import Geomancy.DVec4 (DVec4, dvec4, withDVec4, pattern WithDVec4)+ import Geomancy.IVec2 (IVec2, ivec2, withIVec2, pattern WithIVec2) import Geomancy.IVec3 (IVec3, ivec3, withIVec3, pattern WithIVec3) import Geomancy.IVec4 (IVec4, ivec4, withIVec4, pattern WithIVec4)@@ -96,12 +161,23 @@ import Geomancy.UVec3 (UVec3, uvec3, withUVec3, pattern WithUVec3) import Geomancy.UVec4 (UVec4, uvec4, withUVec4, pattern WithUVec4) +import Geomancy.I64Vec2 (I64Vec2, i64vec2, withI64Vec2, pattern WithI64Vec2)+import Geomancy.I64Vec3 (I64Vec3, i64vec3, withI64Vec3, pattern WithI64Vec3)+import Geomancy.I64Vec4 (I64Vec4, i64vec4, withI64Vec4, pattern WithI64Vec4)++import Geomancy.U64Vec2 (U64Vec2, u64vec2, withU64Vec2, pattern WithU64Vec2)+import Geomancy.U64Vec3 (U64Vec3, u64vec3, withU64Vec3, pattern WithU64Vec3)+import Geomancy.U64Vec4 (U64Vec4, u64vec4, withU64Vec4, pattern WithU64Vec4)+ import Geomancy.Elementwise (Elementwise(..)) import Geomancy.Mat4 (Mat4)+import Geomancy.DMat4 (DMat4) import Geomancy.Transform (Transform(..))+import Geomancy.DTransform (DTransform(..)) import Geomancy.Quaternion (Quaternion, quaternion, withQuaternion)+import Geomancy.DQuaternion (DQuaternion, dquaternion, withDQuaternion) -import Geomancy.Point (AffineSpace(..), Point(..), Point2, Point3, Point3P, Point4)+import Geomancy.Point (AffineSpace(..), Point(..), Point2, Point3, Point3P, Point4, DPoint2, DPoint3, DPoint3P, DPoint4) import Geomancy.Vector (VectorSpace(..), lerp, quadrance, (^*))
+ src/Geomancy/DMat4.hs view
@@ -0,0 +1,351 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE UnliftedFFITypes #-}+{-# LANGUAGE ViewPatterns #-}++{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.DMat4+ ( DMat4+ -- * Operations+ , identity+ , transpose+ , inverse+ , det+ , pointwise+ , zipWith+ , matrixProduct+ , scalarMultiply+ , (!*)++ -- * Construction++ -- ** Col-major+ , colMajor+ , withColMajor+ , toListColMajor+ , toListColMajor2d+ , showColumns++ -- ** Row-major+ , rowMajor+ , withRowMajor+ , toListRowMajor+ , toListRowMajor2d+ , fromRowMajor2d+ , showRows++ -- * Precision conversion+ , fromMat4+ , toMat4+ ) where++import Prelude hiding (zipWith)+import GHC.Exts hiding (VecCount(..), toList)+import GHC.Float (double2Float, float2Double)+import Geomancy.DMat4.Internal++import System.IO.Unsafe (unsafePerformIO)+import Text.Printf (printf)++import qualified Data.Foldable as Foldable++import Geomancy.DVec4 (DVec4(..), newDVec4)+import Geomancy.Mat4.Internal (Mat4)+import qualified Geomancy.Mat4.Internal as Mat4++{-# INLINE fromMat4 #-}+fromMat4 :: Coercible a Mat4 => a -> DMat4+fromMat4 m = Mat4.withMemory (coerce m)+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ fromMemory+ (float2Double e0) (float2Double e1) (float2Double e2) (float2Double e3)+ (float2Double e4) (float2Double e5) (float2Double e6) (float2Double e7)+ (float2Double e8) (float2Double e9) (float2Double eA) (float2Double eB)+ (float2Double eC) (float2Double eD) (float2Double eE) (float2Double eF)++{-# INLINE toMat4 #-}+toMat4 :: DMat4 -> Mat4+toMat4 m = withMemory m+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ Mat4.fromMemory+ (double2Float e0) (double2Float e1) (double2Float e2) (double2Float e3)+ (double2Float e4) (double2Float e5) (double2Float e6) (double2Float e7)+ (double2Float e8) (double2Float e9) (double2Float eA) (double2Float eB)+ (double2Float eC) (double2Float eD) (double2Float eE) (double2Float eF)++toListColMajor :: Coercible a DMat4 => a -> [Double]+toListColMajor = toListTrans . coerce++toListColMajor2d :: Coercible a DMat4 => a -> [[Double]]+toListColMajor2d = toList2dTrans . coerce++rowMajor+ :: Coercible DMat4 a+ => Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> a+rowMajor+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF =+ coerce $ fromMemory+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF++fromRowMajor2d+ :: forall t a+ . ( Foldable t+ , Coercible DMat4 a+ )+ => t (t Double)+ -> Maybe a+fromRowMajor2d rows =+ case Foldable.toList rows of+ [r0, r1, r2, r3] ->+ withRow r0 \e0 e1 e2 e3 ->+ withRow r1 \e4 e5 e6 e7 ->+ withRow r2 \e8 e9 eA eB ->+ withRow r3 \eC eD eE eF ->+ Just . coerce @a $ rowMajor+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF+ _ ->+ Nothing+ where+ withRow row f =+ case Foldable.toList row of+ [c0, c1, c2, c3] ->+ f c0 c1 c2 c3+ _ ->+ Nothing++{-# INLINE withRowMajor #-}+withRowMajor+ :: Coercible a DMat4+ => a+ ->+ ( Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ r+ )+ -> r+withRowMajor m f = withMemory (coerce m)+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ f+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF++{-# INLINE colMajor #-}+colMajor+ :: forall a . Coercible DMat4 a+ => Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> a+colMajor+ e0 e4 e8 eC+ e1 e5 e9 eD+ e2 e6 eA eE+ e3 e7 eB eF =+ coerce $ fromMemory+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF++{-# INLINE withColMajor #-}+withColMajor+ :: Coercible a DMat4+ => a+ ->+ ( Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ r+ )+ -> r+withColMajor m f = withMemory (coerce m)+ \ e0 e4 e8 eC+ e1 e5 e9 eD+ e2 e6 eA eE+ e3 e7 eB eF ->+ f+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF++toListRowMajor :: Coercible a DMat4 => a -> [Double]+toListRowMajor = toListMemory . coerce++toListRowMajor2d :: Coercible a DMat4 => a -> [[Double]]+toListRowMajor2d = toList2dMemory . coerce++det :: Coercible DMat4 a => a -> Double+det m =+ withRowMajor m+ \ m00 m01 m02 m03+ m10 m11 m12 m13+ m20 m21 m22 m23+ m30 m31 m32 m33 ->+ let+ s0 = m00 * m11 - m10 * m01+ s1 = m00 * m12 - m10 * m02+ s2 = m00 * m13 - m10 * m03+ s3 = m01 * m12 - m11 * m02+ s4 = m01 * m13 - m11 * m03+ s5 = m02 * m13 - m12 * m03++ c5 = m22 * m33 - m32 * m23+ c4 = m21 * m33 - m31 * m23+ c3 = m21 * m32 - m31 * m22+ c2 = m20 * m33 - m30 * m23+ c1 = m20 * m32 - m30 * m22+ c0 = m20 * m31 - m30 * m21+ in+ s0 * c5+ - s1 * c4+ + s2 * c3+ + s3 * c2+ - s4 * c1+ + s5 * c0++inverse :: Coercible DMat4 a => a -> a+inverse m =+ withRowMajor m+ \ m00 m01 m02 m03+ m10 m11 m12 m13+ m20 m21 m22 m23+ m30 m31 m32 m33 ->+ let+ invDet = recip $+ s0 * c5+ - s1 * c4+ + s2 * c3+ + s3 * c2+ - s4 * c1+ + s5 * c0++ s0 = m00 * m11 - m10 * m01+ s1 = m00 * m12 - m10 * m02+ s2 = m00 * m13 - m10 * m03+ s3 = m01 * m12 - m11 * m02+ s4 = m01 * m13 - m11 * m03+ s5 = m02 * m13 - m12 * m03++ c5 = m22 * m33 - m32 * m23+ c4 = m21 * m33 - m31 * m23+ c3 = m21 * m32 - m31 * m22+ c2 = m20 * m33 - m30 * m23+ c1 = m20 * m32 - m30 * m22+ c0 = m20 * m31 - m30 * m21++ i00 = ( m11 * c5 - m12 * c4 + m13 * c3) * invDet+ i01 = (-m01 * c5 + m02 * c4 - m03 * c3) * invDet+ i02 = ( m31 * s5 - m32 * s4 + m33 * s3) * invDet+ i03 = (-m21 * s5 + m22 * s4 - m23 * s3) * invDet++ i10 = (-m10 * c5 + m12 * c2 - m13 * c1) * invDet+ i11 = ( m00 * c5 - m02 * c2 + m03 * c1) * invDet+ i12 = (-m30 * s5 + m32 * s2 - m33 * s1) * invDet+ i13 = ( m20 * s5 - m22 * s2 + m23 * s1) * invDet++ i20 = ( m10 * c4 - m11 * c2 + m13 * c0) * invDet+ i21 = (-m00 * c4 + m01 * c2 - m03 * c0) * invDet+ i22 = ( m30 * s4 - m31 * s2 + m33 * s0) * invDet+ i23 = (-m20 * s4 + m21 * s2 - m23 * s0) * invDet++ i30 = (-m10 * c3 + m11 * c1 - m12 * c0) * invDet+ i31 = ( m00 * c3 - m01 * c1 + m02 * c0) * invDet+ i32 = (-m30 * s3 + m31 * s1 - m32 * s0) * invDet+ i33 = ( m20 * s3 - m21 * s1 + m22 * s0) * invDet+ in+ rowMajor+ i00 i01 i02 i03+ i10 i11 i12 i13+ i20 i21 i22 i23+ i30 i31 i32 i33++foreign import ccall unsafe "DMat4xDMat4_SIMD" m4m4simd :: ByteArray# -> ByteArray# -> ByteArray# -> IO ()++{-# INLINE matrixProduct #-}+matrixProduct :: DMat4 -> DMat4 -> DMat4+matrixProduct (DMat4 l) (DMat4 r) = unsafePerformIO do+ result@(DMat4 m) <- newDMat4+ m4m4simd l r m+ pure result++foreign import ccall unsafe "DMat4xDVec4_SIMD" m4v4simd :: ByteArray# -> ByteArray# -> ByteArray# -> IO ()++(!*) :: Coercible a DMat4 => a -> DVec4 -> DVec4+(!*) (coerce -> DMat4 m) (DVec4 v) = unsafePerformIO do+ result@(DVec4 o) <- newDVec4+ !() <- m4v4simd m v o+ pure result++infixr 5 !*++instance Semigroup DMat4 where+ {-# INLINE (<>) #-}+ (<>) = matrixProduct++instance Monoid DMat4 where+ {-# INLINE mempty #-}+ mempty = identity++instance Show DMat4 where+ show = showColumns++showColumns :: DMat4 -> String+showColumns cm = withColMajor cm+ \ e0 e4 e8 eC+ e1 e5 e9 eD+ e2 e6 eA eE+ e3 e7 eB eF ->+ unlines+ [ printf "/ %.4f %.4f %.4f %.4f \\" e0 e4 e8 eC+ , printf "| %.4f %.4f %.4f %.4f |" e1 e5 e9 eD+ , printf "| %.4f %.4f %.4f %.4f |" e2 e6 eA eE+ , printf "\\ %.4f %.4f %.4f %.4f /" e3 e7 eB eF+ ]++showRows :: DMat4 -> String+showRows rm = withRowMajor rm+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ unlines+ [ printf "[ %.4f %.4f %.4f %.4f |" e0 e1 e2 e3+ , printf "| %.4f %.4f %.4f %.4f |" e4 e5 e6 e7+ , printf "| %.4f %.4f %.4f %.4f |" e8 e9 eA eB+ , printf "| %.4f %.4f %.4f %.4f ]" eC eD eE eF+ ]
+ src/Geomancy/DMat4/Internal.hs view
@@ -0,0 +1,392 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UnboxedTuples #-}++#ifdef TH_LIFT+{-# LANGUAGE TemplateHaskell #-}+#endif++module Geomancy.DMat4.Internal+ ( DMat4(..)+ , fromMemory+ , withMemory+ , newDMat4+ -- * Order-independent operations+ , identity+ , transpose+ , pointwise+ , scalarMultiply+ -- * List operations in memory order+ , toListMemory+ , toList2dMemory+ , toListTrans+ , toList2dTrans+ , zipWith+ ) where++import Prelude hiding (zipWith)+import GHC.Exts hiding (VecCount(..), toList)++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift(..))+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Control.DeepSeq (NFData(rnf))+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.IO (IO(..))++import qualified Data.List as List++import Graphics.Gl.Block (Block(..))++data DMat4 = DMat4 ByteArray#++instance Eq DMat4 where+ DMat4 a == DMat4 b = go 0#+ where+ go i+ | isTrue# (i ==# 16#) = True+ | isTrue# (indexDoubleArray# a i ==## indexDoubleArray# b i) = go (i +# 1#)+ | otherwise = False++instance NFData DMat4 where+ rnf DMat4{} = ()++{-# INLINE fromMemory #-}+fromMemory+ :: Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> Double -> Double -> Double -> Double+ -> DMat4+fromMemory+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 ea eb+ ec ed ee ef =+ runRW# \world ->+ let+ !(# world_, arr #) = newByteArray# 128# world++ write i (D# e) = writeDoubleArray# arr i e++ world0 = write 0x0# e0 world_+ world1 = write 0x1# e1 world0+ world2 = write 0x2# e2 world1+ world3 = write 0x3# e3 world2++ world4 = write 0x4# e4 world3+ world5 = write 0x5# e5 world4+ world6 = write 0x6# e6 world5+ world7 = write 0x7# e7 world6++ world8 = write 0x8# e8 world7+ world9 = write 0x9# e9 world8+ worldA = write 0xA# ea world9+ worldB = write 0xB# eb worldA++ worldC = write 0xC# ec worldB+ worldD = write 0xD# ed worldC+ worldE = write 0xE# ee worldD+ worldF = write 0xF# ef worldE++ !(# _world', arr' #) = unsafeFreezeByteArray# arr worldF+ in+ DMat4 arr'++{-# INLINE withMemory #-}+withMemory+ :: DMat4+ ->+ ( Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ Double -> Double -> Double -> Double ->+ r+ )+ -> r+withMemory (DMat4 arr) f =+ f+ (D# (indexDoubleArray# arr 0x0#))+ (D# (indexDoubleArray# arr 0x1#))+ (D# (indexDoubleArray# arr 0x2#))+ (D# (indexDoubleArray# arr 0x3#))++ (D# (indexDoubleArray# arr 0x4#))+ (D# (indexDoubleArray# arr 0x5#))+ (D# (indexDoubleArray# arr 0x6#))+ (D# (indexDoubleArray# arr 0x7#))++ (D# (indexDoubleArray# arr 0x8#))+ (D# (indexDoubleArray# arr 0x9#))+ (D# (indexDoubleArray# arr 0xA#))+ (D# (indexDoubleArray# arr 0xB#))++ (D# (indexDoubleArray# arr 0xC#))+ (D# (indexDoubleArray# arr 0xD#))+ (D# (indexDoubleArray# arr 0xE#))+ (D# (indexDoubleArray# arr 0xF#))++#ifdef TH_LIFT+instance Lift DMat4 where+ lift m = withMemory m+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ [|+ fromMemory+ $(lift e0) $(lift e1) $(lift e2) $(lift e3)+ $(lift e4) $(lift e5) $(lift e6) $(lift e7)+ $(lift e8) $(lift e9) $(lift eA) $(lift eB)+ $(lift eC) $(lift eD) $(lift eE) $(lift eF)+ |]+ liftTyped m = withMemory m+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ [||+ fromMemory+ $$(liftTyped e0) $$(liftTyped e1) $$(liftTyped e2) $$(liftTyped e3)+ $$(liftTyped e4) $$(liftTyped e5) $$(liftTyped e6) $$(liftTyped e7)+ $$(liftTyped e8) $$(liftTyped e9) $$(liftTyped eA) $$(liftTyped eB)+ $$(liftTyped eC) $$(liftTyped eD) $$(liftTyped eE) $$(liftTyped eF)+ ||]+#endif+++{-# INLINE identity #-}+identity :: DMat4+identity = fromMemory+ 1 0 0 0+ 0 1 0 0+ 0 0 1 0+ 0 0 0 1++{-# INLINE transpose #-}+transpose :: DMat4 -> DMat4+transpose =+ flip withMemory+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ fromMemory+ e0 e4 e8 eC+ e1 e5 e9 eD+ e2 e6 eA eE+ e3 e7 eB eF++pointwise :: DMat4 -> DMat4 -> (Double -> Double -> Double) -> DMat4+pointwise a b f =+ withMemory a+ \ a0 a1 a2 a3+ a4 a5 a6 a7+ a8 a9 aA aB+ aC aD aE aF ->+ withMemory b+ \ b0 b1 b2 b3+ b4 b5 b6 b7+ b8 b9 bA bB+ bC bD bE bF ->+ fromMemory+ (f a0 b0) (f a1 b1) (f a2 b2) (f a3 b3)+ (f a4 b4) (f a5 b5) (f a6 b6) (f a7 b7)+ (f a8 b8) (f a9 b9) (f aA bA) (f aB bB)+ (f aC bC) (f aD bD) (f aE bE) (f aF bF)++{-# INLINE newDMat4 #-}+newDMat4 :: IO DMat4+newDMat4 =+ IO \world ->+ let+ !(# world_, arr_ #) = newByteArray# 128# world+ !(# world', arr #) = unsafeFreezeByteArray# arr_ world_+ in+ (# world', DMat4 arr #)++{-# INLINE scalarMultiply #-}+scalarMultiply :: Double -> DMat4 -> DMat4+scalarMultiply x m =+ withMemory m+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ fromMemory+ (e0 * x) (e1 * x) (e2 * x) (e3 * x)+ (e4 * x) (e5 * x) (e6 * x) (e7 * x)+ (e8 * x) (e9 * x) (eA * x) (eB * x)+ (eC * x) (eD * x) (eE * x) (eF * x)++instance Storable DMat4 where+ sizeOf _mat4 = 128++ alignment _mat4 = 32++ {-# INLINE poke #-}+ poke (Ptr addr) (DMat4 arr) = IO \world ->+ let+ world' = copyByteArrayToAddr# arr 0# addr 128# world+ in+ (# world', () #)++ {-# INLINE peek #-}+ peek (Ptr addr) = IO \world ->+ let+ load i = readDoubleOffAddr# addr i++ !(# world0, e0 #) = load 0x0# world+ !(# world1, e1 #) = load 0x1# world0+ !(# world2, e2 #) = load 0x2# world1+ !(# world3, e3 #) = load 0x3# world2++ !(# world4, e4 #) = load 0x4# world3+ !(# world5, e5 #) = load 0x5# world4+ !(# world6, e6 #) = load 0x6# world5+ !(# world7, e7 #) = load 0x7# world6++ !(# world8, e8 #) = load 0x8# world7+ !(# world9, e9 #) = load 0x9# world8+ !(# worldA, eA #) = load 0xA# world9+ !(# worldB, eB #) = load 0xB# worldA++ !(# worldC, eC #) = load 0xC# worldB+ !(# worldD, eD #) = load 0xD# worldC+ !(# worldE, eE #) = load 0xE# worldD+ !(# world', eF #) = load 0xF# worldE++ !mat = fromMemory+ (D# e0) (D# e1) (D# e2) (D# e3)+ (D# e4) (D# e5) (D# e6) (D# e7)+ (D# e8) (D# e9) (D# eA) (D# eB)+ (D# eC) (D# eD) (D# eE) (D# eF)+ in+ (# world', mat #)++instance Block DMat4 where+ type PackedSize DMat4 = 128+ alignment140 _ = 32+ sizeOf140 = sizeOfPacked+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++#ifdef SERIALISE+instance Serialise DMat4 where+ encode m =+ withMemory m+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ Serialise.encodeListLen 16 <>+ encode e0 <>+ encode e1 <> encode e2 <> encode e3 <>+ encode e4 <> encode e5 <> encode e6 <> encode e7 <>+ encode e8 <> encode e9 <> encode eA <> encode eB <>+ encode eC <> encode eD <> encode eE <> encode eF+ decode = do+ Serialise.decodeListLenOf 16+ e0 <- decode+ e1 <- decode+ e2 <- decode+ e3 <- decode+ e4 <- decode+ e5 <- decode+ e6 <- decode+ e7 <- decode+ e8 <- decode+ e9 <- decode+ eA <- decode+ eB <- decode+ eC <- decode+ eD <- decode+ eE <- decode+ eF <- decode+ pure $! fromMemory+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF+#endif++toListMemory :: DMat4 -> [Double]+toListMemory = flip withMemory+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ [ e0, e1, e2, e3+ , e4, e5, e6, e7+ , e8, e9, eA, eB+ , eC, eD, eE, eF+ ]++toList2dMemory :: DMat4 -> [[Double]]+toList2dMemory = flip withMemory+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ [ [e0, e1, e2, e3]+ , [e4, e5, e6, e7]+ , [e8, e9, eA, eB]+ , [eC, eD, eE, eF]+ ]++toListTrans :: DMat4 -> [Double]+toListTrans = flip withMemory+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ [ e0, e4, e8, eC+ , e1, e5, e9, eD+ , e2, e6, eA, eE+ , e3, e7, eB, eF+ ]++toList2dTrans :: DMat4 -> [[Double]]+toList2dTrans = flip withMemory+ \ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 eA eB+ eC eD eE eF ->+ [ [e0, e4, e8, eC]+ , [e1, e5, e9, eD]+ , [e2, e6, eA, eE]+ , [e3, e7, eB, eF]+ ]++zipWith :: (Double -> Double -> c) -> DMat4 -> DMat4 -> [c]+zipWith f a b = List.zipWith f (toListMemory a) (toListMemory b)
+ src/Geomancy/DQuaternion.hs view
@@ -0,0 +1,358 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeFamilies #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif++module Geomancy.DQuaternion+ ( DQuaternion+ , dquaternion+ , withDQuaternion++ , axisAngle+ , intrinsic+ , extrinsic+ , rotate+ , rotatePoint+ , rotationBetween+ , lookAtUp++ , (^*)+ , (^/)+ , slerp++ , conjugate+ , norm+ , quadrance+ , dot+ , normalize+ , qNaN++ , fromQuaternion+ , toQuaternion+ ) where++import Control.DeepSeq (NFData(rnf))+import Foreign (Storable(..), castPtr)+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Float (double2Float, float2Double)++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Graphics.Gl.Block (Block(..))+import Geomancy.DVec3 (DVec3, dvec3, withDVec3)+import Geomancy.Quaternion (Quaternion, quaternion, withQuaternion)++import qualified Geomancy.DVec3 as DVec3++data DQuaternion = DQuaternion+ {-# UNPACK #-} !Double+ {-# UNPACK #-} !Double+ {-# UNPACK #-} !Double+ {-# UNPACK #-} !Double+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE dquaternion #-}+dquaternion :: Double -> Double -> Double -> Double -> DQuaternion+dquaternion = DQuaternion++{-# INLINE withDQuaternion #-}+withDQuaternion+ :: DQuaternion+ -> (Double -> Double -> Double -> Double -> r)+ -> r+withDQuaternion (DQuaternion a b c d) f = f a b c d++{-# INLINE fromQuaternion #-}+fromQuaternion :: Quaternion -> DQuaternion+fromQuaternion q =+ withQuaternion q \a b c d ->+ dquaternion (float2Double a) (float2Double b) (float2Double c) (float2Double d)++{-# INLINE toQuaternion #-}+toQuaternion :: DQuaternion -> Quaternion+toQuaternion q =+ withDQuaternion q \a b c d ->+ quaternion (double2Float a) (double2Float b) (double2Float c) (double2Float d)++{-# INLINE (^*) #-}+(^*) :: DQuaternion -> Double -> DQuaternion+DQuaternion a b c d ^* x =+ DQuaternion+ (a * x)+ (b * x)+ (c * x)+ (d * x)++{-# INLINE (^/) #-}+(^/) :: DQuaternion -> Double -> DQuaternion+DQuaternion a b c d ^/ x =+ DQuaternion+ (a / x)+ (b / x)+ (c / x)+ (d / x)++slerp :: DQuaternion -> DQuaternion -> Double -> DQuaternion+slerp q p t+ | 1.0 - cosphi < 1e-12 =+ q+ | otherwise =+ ( (q ^* sin ((1 - t) * phi)) ++ f p ^* sin (t * phi)+ ) ^/ sin phi+ where+ phi = acos cosphi++ (cosphi, f) =+ if dqp < 0 then+ (-dqp, negate)+ else+ (dqp, id)++ dqp = dot q p++{-# INLINE conjugate #-}+conjugate :: DQuaternion -> DQuaternion+conjugate (DQuaternion e x y z) = DQuaternion e (-x) (-y) (-z)++{-# INLINE norm #-}+norm :: DQuaternion -> Double+norm = sqrt . quadrance++{-# INLINE quadrance #-}+quadrance :: DQuaternion -> Double+quadrance q = dot q q++{-# INLINE dot #-}+dot :: DQuaternion -> DQuaternion -> Double+dot (DQuaternion a b c d) (DQuaternion e f g h) =+ a * e ++ b * f ++ c * g ++ d * h++{-# INLINE normalize #-}+normalize :: DQuaternion -> DQuaternion+normalize v =+ if nearZero q || nearZero (1-q) then+ v+ else+ let+ DQuaternion e i j k = v+ in+ DQuaternion (e / l) (i / l) (j / l) (k / l)++ where+ q = dot v v+ l = sqrt q++ nearZero a = abs a <= 1e-12++instance NFData DQuaternion where+ rnf DQuaternion{} = ()++instance Num DQuaternion where+ {-# INLINE (+) #-}+ DQuaternion a b c d + DQuaternion e f g h =+ DQuaternion+ (a + e)+ (b + f)+ (c + g)+ (d + h)++ {-# INLINE (-) #-}+ DQuaternion a b c d - DQuaternion e f g h =+ DQuaternion+ (a - e)+ (b - f)+ (c - g)+ (d - h)++ {-# INLINE (*) #-}+ DQuaternion as ax ay az * DQuaternion bs bx by bz =+ withDVec3 v \x y z ->+ DQuaternion s x y z+ where+ s = as * bs - DVec3.dot v1 v2+ v = DVec3.cross v1 v2 + v2 DVec3.^* as + v1 DVec3.^* bs+ v1 = dvec3 ax ay az+ v2 = dvec3 bx by bz++ {-# INLINE fromInteger #-}+ fromInteger x = DQuaternion (fromInteger x) 0 0 0++ {-# INLINE abs #-}+ abs z = DQuaternion (norm z) 0 0 0++ {-# INLINE signum #-}+ signum q@(DQuaternion e i j k)+ | m == 0 =+ q+ | not (isInfinite m || isNaN m) =+ DQuaternion (e * misqrt) (i * misqrt) (j * misqrt) (k * misqrt)+ | any isNaN [e, i, j, k] = qNaN+ | not (ii || ij || ik) = DQuaternion 1 0 0 0+ | not (ie || ij || ik) = DQuaternion 0 1 0 0+ | not (ie || ii || ik) = DQuaternion 0 0 1 0+ | not (ie || ii || ij) = DQuaternion 0 0 0 1+ | otherwise = qNaN+ where+ m = quadrance q+ misqrt = recip (sqrt m)++ ie = isInfinite e+ ii = isInfinite i+ ij = isInfinite j+ ik = isInfinite k++{-# INLINE qNaN #-}+qNaN :: DQuaternion+qNaN = DQuaternion dNaN dNaN dNaN dNaN+ where+ dNaN = 0/0++instance Storable DQuaternion where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 32++ {-# INLINE poke #-}+ poke ptr (DQuaternion a b c d) = do+ poke ptr' a+ pokeElemOff ptr' 1 b+ pokeElemOff ptr' 2 c+ pokeElemOff ptr' 3 d+ where+ ptr' = castPtr ptr++ {-# INLINE peek #-}+ peek ptr = DQuaternion+ <$> peek ptr'+ <*> peekElemOff ptr' 1+ <*> peekElemOff ptr' 2+ <*> peekElemOff ptr' 3+ where+ ptr' = castPtr ptr++{-# INLINE axisAngle #-}+axisAngle :: DVec3 -> Double -> DQuaternion+axisAngle axis rads =+ withDVec3 (DVec3.normalize axis DVec3.^* sin half) $+ dquaternion (cos half)+ where+ half = rads / 2++intrinsic :: Double -> Double -> Double -> DQuaternion+intrinsic roll pitch yaw =+ dquaternion+ (cx * cy * cz + sx * sy * sz)+ (sx * cy * cz + cx * sy * sz)+ (cx * sy * cz - sx * cy * sz)+ (cx * cy * sz - sx * sy * cz)+ where+ cx = cos (pitch * 0.5)+ sx = sin (pitch * 0.5)+ cy = cos (yaw * 0.5)+ sy = sin (yaw * 0.5)+ cz = cos (roll * 0.5)+ sz = sin (roll * 0.5)++extrinsic :: Double -> Double -> Double -> DQuaternion+extrinsic heading elevation tilt =+ axisAngle (dvec3 0 0 1) tilt *+ axisAngle (dvec3 1 0 0) elevation *+ axisAngle (dvec3 0 1 0) heading++{-# INLINE rotate #-}+rotate :: DQuaternion -> DVec3 -> DVec3+rotate (DQuaternion w x y z) v =+ withDVec3 v \vx vy vz ->+ let+ x2 = x + x+ y2 = y + y+ z2 = z + z+ tx = y2 * vz - z2 * vy+ ty = z2 * vx - x2 * vz+ tz = x2 * vy - y2 * vx+ in+ dvec3+ (vx + w * tx + y * tz - z * ty)+ (vy + w * ty + z * tx - x * tz)+ (vz + w * tz + x * ty - y * tx)++{-# INLINE rotatePoint #-}+rotatePoint :: DQuaternion -> DVec3 -> DVec3 -> DVec3+rotatePoint q origin point =+ origin + rotate q (point - origin)++rotationBetween :: DVec3 -> DVec3 -> DQuaternion+rotationBetween v1 v2 = axisAngle axis angle+ where+ axis = DVec3.cross v1 v2+ angle = acos cosAngle+ cosAngle =+ max (-1) . min 1 $+ DVec3.dot (DVec3.normalize v1) (DVec3.normalize v2)++lookAtUp :: DVec3 -> DVec3 -> DVec3 -> DQuaternion+lookAtUp src dst up = rot2 * rot1+ where+ dir3 = dst - src++ rot1 = rotationBetween (dvec3 0 0 1) dir3++ rot2 = rotationBetween newUp fixedUp++ newUp = rotate rot1 up+ fixedUp = DVec3.cross (DVec3.cross dir3 up) dir3++instance Block DQuaternion where+ type PackedSize DQuaternion = 32+ alignment140 _ = 32+ sizeOf140 = sizeOfPacked+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = True+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++#ifdef SERIALISE+instance Serialise DQuaternion where+ encode v = withDQuaternion v \x y z w ->+ Serialise.encodeListLen 4 <> encode x <> encode y <> encode z <> encode w+ decode =+ Serialise.decodeListLenOf 4 *> (dquaternion <$> decode <*> decode <*> decode <*> decode)+#endif
+ src/Geomancy/DTransform.hs view
@@ -0,0 +1,226 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE GeneralisedNewtypeDeriving #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE TypeFamilies #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+#endif++module Geomancy.DTransform+ ( DTransform(..)+ , DMat4.inverse++ , apply+ , (!.)++ , translate+ , translateV++ , rotateX+ , rotateY+ , rotateZ+ , rotateQ++ , scale+ , scaleX+ , scaleY+ , scaleZ+ , scaleXY+ , scale3+ , scaleV++ , dirPos+ , node++ , fromTransform+ , toTransform+ ) where++import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise)+#endif++import Geomancy.DMat4 (DMat4, colMajor)+import Geomancy.DQuaternion (DQuaternion, withDQuaternion)+import Geomancy.DVec3 (DVec3, dvec3, withDVec3)+import Geomancy.DVec4 (fromDVec3, withDVec4)+import Geomancy.DMat4 qualified as DMat4+import Geomancy.Transform (Transform(..))++import Graphics.Gl.Block (Block(..))++newtype DTransform = DTransform { unDTransform :: DMat4 }+ deriving newtype (Eq, Show, Semigroup, Monoid, Storable)+#ifdef TH_LIFT+ deriving Lift+#endif+#ifdef SERIALISE+ deriving Serialise+#endif++instance Block DTransform where+ type PackedSize DTransform = 128+ alignment140 _ = 32+ sizeOf140 = sizeOfPacked+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++{-# INLINE fromTransform #-}+fromTransform :: Transform -> DTransform+fromTransform = DTransform . DMat4.fromMat4++{-# INLINE toTransform #-}+toTransform :: DTransform -> Transform+toTransform = Transform . DMat4.toMat4 . unDTransform++apply :: DVec3 -> DTransform -> DVec3+apply = flip (!.)++(!.) :: DTransform -> DVec3 -> DVec3+(!.) mat vec =+ withDVec4 res \x y z w ->+ dvec3 (x / w) (y / w) (z / w)+ where+ res = mat DMat4.!* fromDVec3 vec 1.0++infixr 5 !.++{-# INLINE translate #-}+translate :: Double -> Double -> Double -> DTransform+translate x y z = colMajor+ 1 0 0 x+ 0 1 0 y+ 0 0 1 z+ 0 0 0 1++{-# INLINE translateV #-}+translateV :: DVec3 -> DTransform+translateV vec = withDVec3 vec translate++{-# INLINE scale3 #-}+scale3 :: Double -> Double -> Double -> DTransform+scale3 x y z = colMajor+ x 0 0 0+ 0 y 0 0+ 0 0 z 0+ 0 0 0 1++{-# INLINE scale #-}+scale :: Double -> DTransform+scale s = scale3 s s s++{-# INLINE scaleX #-}+scaleX :: Double -> DTransform+scaleX x = scale3 x 1 1++{-# INLINE scaleY #-}+scaleY :: Double -> DTransform+scaleY y = scale3 1 y 1++{-# INLINE scaleZ #-}+scaleZ :: Double -> DTransform+scaleZ z = scale3 1 1 z++{-# INLINE scaleXY #-}+scaleXY :: Double -> Double -> DTransform+scaleXY x y = scale3 x y 1++{-# INLINE scaleV #-}+scaleV :: DVec3 -> DTransform+scaleV s = withDVec3 s scale3++{-# INLINE rotateX #-}+rotateX :: Double -> DTransform+rotateX rads =+ colMajor+ 1 0 0 0+ 0 c (-s) 0+ 0 s c 0+ 0 0 0 1+ where+ c = cos rads+ s = sin rads++{-# INLINE rotateY #-}+rotateY :: Double -> DTransform+rotateY rads =+ colMajor+ c 0 s 0+ 0 1 0 0+ (-s) 0 c 0+ 0 0 0 1+ where+ c = cos rads+ s = sin rads++{-# INLINE rotateZ #-}+rotateZ :: Double -> DTransform+rotateZ rads =+ colMajor+ c (-s) 0 0+ s c 0 0+ 0 0 1 0+ 0 0 0 1+ where+ c = cos rads+ s = sin rads++{-# INLINE rotateQ #-}+rotateQ :: DQuaternion -> DTransform+rotateQ dir = dirPos dir 0++{-# INLINE dirPos #-}+dirPos :: DQuaternion -> DVec3 -> DTransform+dirPos rs t =+ withDQuaternion rs \w x y z ->+ withDVec3 t \tx ty tz ->+ let+ x2 = x * x+ y2 = y * y+ z2 = z * z+ xy = x * y+ xz = x * z+ xw = x * w+ yz = y * z+ yw = y * w+ zw = z * w+ in+ colMajor+ (1 - 2 * (y2 + z2)) ( 2 * (xy - zw)) ( 2 * (xz + yw)) tx+ ( 2 * (xy + zw)) (1 - 2 * (x2 + z2)) ( 2 * (yz - xw)) ty+ ( 2 * (xz - yw)) ( 2 * (yz + xw)) (1 - 2 * (x2 + y2)) tz+ 0 0 0 1++node :: DVec3 -> DQuaternion -> DVec3 -> DTransform+node t r s+ | s == 1.0 = dirPos r t+ | otherwise = dirPos r t <> scaleV s
+ src/Geomancy/DTransform/Tree.hs view
@@ -0,0 +1,132 @@+module Geomancy.DTransform.Tree+ ( Transformed+ , apply+ , node_+ , leaf_+ , collect_++ , translate_+ , translateV_++ , rotateX_+ , rotateY_+ , rotateZ_+ , rotateQ_++ , scale_+ , scaleX_+ , scaleY_+ , scaleZ_+ , scaleXY_+ , scale3_+ ) where++import Geomancy.DQuaternion (DQuaternion)+import Geomancy.DTransform (DTransform)+import Geomancy.Tree (Tree, apply, node_, leaf_, collect_)+import Geomancy.DVec3 (DVec3)++import qualified Geomancy.DTransform as DTransform++type Transformed a = Tree (DTransform, Maybe a)++{-# INLINE translate_ #-}+translate_+ :: Double+ -> Double+ -> Double+ -> [Transformed a]+ -> Transformed a+translate_ x y z =+ node_ (DTransform.translate x y z)++{-# INLINE translateV_ #-}+translateV_+ :: DVec3+ -> [Transformed a]+ -> Transformed a+translateV_ xyz =+ node_ (DTransform.translateV xyz)++{-# INLINE rotateX_ #-}+rotateX_+ :: Double+ -> [Transformed a]+ -> Transformed a+rotateX_ rads =+ node_ (DTransform.rotateX rads)++{-# INLINE rotateY_ #-}+rotateY_+ :: Double+ -> [Transformed a]+ -> Transformed a+rotateY_ rads =+ node_ (DTransform.rotateY rads)++{-# INLINE rotateZ_ #-}+rotateZ_+ :: Double+ -> [Transformed a]+ -> Transformed a+rotateZ_ rads =+ node_ (DTransform.rotateZ rads)++{-# INLINE rotateQ_ #-}+rotateQ_+ :: DQuaternion+ -> [Transformed a]+ -> Transformed a+rotateQ_ rot =+ node_ (DTransform.rotateQ rot)++{-# INLINE scale_ #-}+scale_+ :: Double+ -> [Transformed a]+ -> Transformed a+scale_ x =+ node_ (DTransform.scale x)++{-# INLINE scaleX_ #-}+scaleX_+ :: Double+ -> [Transformed a]+ -> Transformed a+scaleX_ rads =+ node_ (DTransform.scaleX rads)++{-# INLINE scaleY_ #-}+scaleY_+ :: Double+ -> [Transformed a]+ -> Transformed a+scaleY_ rads =+ node_ (DTransform.scaleY rads)++{-# INLINE scaleZ_ #-}+scaleZ_+ :: Double+ -> [Transformed a]+ -> Transformed a+scaleZ_ rads =+ node_ (DTransform.scaleZ rads)++{-# INLINE scaleXY_ #-}+scaleXY_+ :: Double+ -> Double+ -> [Transformed a]+ -> Transformed a+scaleXY_ x y =+ node_ (DTransform.scaleXY x y)++{-# INLINE scale3_ #-}+scale3_+ :: Double+ -> Double+ -> Double+ -> [Transformed a]+ -> Transformed a+scale3_ x y z =+ node_ (DTransform.scale3 x y z)
+ src/Geomancy/DVec2.hs view
@@ -0,0 +1,340 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif++module Geomancy.DVec2+ ( DVec2+ , dvec2+ , withDVec2+ , pattern WithDVec2+ , fromTuple+ , convert++ , (^*)+ , (^/)+ , lerp++ , dot+ , normalize++ , fromVec2+ , toVec2+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Data.VectorSpace (VectorSpace)+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Float (double2Float, float2Double)+import GHC.Records (HasField(..))+import qualified Data.VectorSpace as VectorSpace++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))+import Geomancy.Vec2 (Vec2)+import qualified Geomancy.Vec2 as Vec2++data DVec2 = DVec2+ {-# UNPACK #-} !Double+ {-# UNPACK #-} !Double+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE dvec2 #-}+dvec2 :: Double -> Double -> DVec2+dvec2 = DVec2++{-# INLINE withDVec2 #-}+withDVec2+ :: DVec2+ -> (Double -> Double -> r)+ -> r+withDVec2 (DVec2 a b) f = f a b++{-# INLINE convert #-}+convert :: Coercible v DVec2 => (Double -> a) -> (a -> a -> r) -> v -> r+convert f t v =+ withDVec2 (coerce v) \a b ->+ t (f a) (f b)++pattern WithDVec2 :: Double -> Double -> DVec2+pattern WithDVec2 a b <- ((`withDVec2` (,)) -> (a, b))+{-# COMPLETE WithDVec2 #-}++instance HasField "x" DVec2 Double where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x _ -> x++instance HasField "y" DVec2 Double where+ {-# INLINE getField #-}+ getField v = withDVec2 v \_ y -> y++{-# INLINE fromTuple #-}+fromTuple :: (Double, Double) -> DVec2+fromTuple (x, y) = dvec2 x y++{-# INLINE fromVec2 #-}+fromVec2 :: Vec2 -> DVec2+fromVec2 = Vec2.convert float2Double dvec2++{-# INLINE toVec2 #-}+toVec2 :: DVec2 -> Vec2+toVec2 = convert double2Float Vec2.vec2++instance NFData DVec2 where+ rnf DVec2{} = ()++type instance Element DVec2 = Double++instance MonoFunctor DVec2 where+ {-# INLINE omap #-}+ omap f v =+ withDVec2 v \x y ->+ dvec2 (f x) (f y)++instance MonoPointed DVec2 where+ opoint x = dvec2 x x++instance Elementwise DVec2 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withDVec2 p0 \x0 y0 ->+ withDVec2 p1 \x1 y1 ->+ dvec2+ (f x0 x1)+ (f y0 y1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withDVec2 p0 \x0 y0 ->+ withDVec2 p1 \x1 y1 ->+ withDVec2 p2 \x2 y2 ->+ dvec2+ (f x0 x1 x2)+ (f y0 y1 y2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withDVec2 p0 \x0 y0 ->+ withDVec2 p1 \x1 y1 ->+ withDVec2 p2 \x2 y2 ->+ withDVec2 p3 \x3 y3 ->+ dvec2+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withDVec2 p0 \x0 y0 ->+ withDVec2 p1 \x1 y1 ->+ withDVec2 p2 \x2 y2 ->+ withDVec2 p3 \x3 y3 ->+ withDVec2 p4 \x4 y4 ->+ dvec2+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)++instance Num DVec2 where+ {-# INLINE (+) #-}+ DVec2 l1 l2 + DVec2 r1 r2 =+ DVec2+ (l1 + r1)+ (l2 + r2)++ {-# INLINE (-) #-}+ DVec2 l1 l2 - DVec2 r1 r2 =+ DVec2+ (l1 - r1)+ (l2 - r2)++ {-# INLINE (*) #-}+ DVec2 l1 l2 * DVec2 r1 r2 =+ DVec2+ (l1 * r1)+ (l2 * r2)++ {-# INLINE abs #-}+ abs (DVec2 a b) =+ DVec2 (abs a) (abs b)++ {-# INLINE signum #-}+ signum (DVec2 a b) =+ DVec2 (signum a) (signum b)++ {-# INLINE fromInteger #-}+ fromInteger x = DVec2 x' x'+ where+ x' = fromInteger x++instance Fractional DVec2 where+ {-# INLINE (/) #-}+ DVec2 l1 l2 / DVec2 r1 r2 =+ DVec2 (l1 / r1) (l2 / r2)++ {-# INLINE recip #-}+ recip (DVec2 a b) =+ DVec2 (recip a) (recip b)++ {-# INLINE fromRational #-}+ fromRational x = DVec2 x' x'+ where+ x' = fromRational x++instance Floating DVec2 where+ pi = opoint pi++ exp = omap exp+ log = omap log+ sqrt = omap sqrt+ sin = omap sin+ cos = omap cos+ asin = omap asin+ acos = omap acos+ atan = omap atan+ sinh = omap sinh+ cosh = omap cosh+ asinh = omap asinh+ acosh = omap acosh+ atanh = omap atanh++ (**) = emap2 (**)++{-# INLINE (^*) #-}+(^*) :: DVec2 -> Double -> DVec2+DVec2 a b ^* x =+ DVec2+ (a * x)+ (b * x)++{-# INLINE (^/) #-}+(^/) :: DVec2 -> Double -> DVec2+DVec2 a b ^/ x =+ DVec2+ (a / x)+ (b / x)++{-# INLINE lerp #-}+lerp :: Double -> DVec2 -> DVec2 -> DVec2+lerp alpha u v = u ^* alpha + v ^* (1 - alpha)++{-# INLINE dot #-}+dot :: DVec2 -> DVec2 -> Double+dot (DVec2 l1 l2) (DVec2 r1 r2) =+ l1 * r1 + l2 * r2++{-# INLINE normalize #-}+normalize :: DVec2 -> DVec2+normalize v =+ if nearZero q || nearZero (1 - q) then+ v+ else+ let+ DVec2 x y = v+ in+ DVec2 (x / l) (y / l)++ where+ q = dot v v+ l = sqrt q++ nearZero a = abs a <= 1e-12++instance Storable DVec2 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 16++ {-# INLINE alignment #-}+ alignment _ = 16++ {-# INLINE poke #-}+ poke ptr v2 =+ withDVec2 v2 \a b -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b++ {-# INLINE peek #-}+ peek ptr = dvec2+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8++instance Block DVec2 where+ type PackedSize DVec2 = 16+ alignment140 _ = 16+ sizeOf140 _ = 16+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++#ifdef SERIALISE+instance Serialise DVec2 where+ encode v = withDVec2 v \x y ->+ Serialise.encodeListLen 2 <> encode x <> encode y+ decode =+ Serialise.decodeListLenOf 2 *> (dvec2 <$> decode <*> decode)+#endif++instance VectorSpace DVec2 Double where+ zeroVector = epoint 0++ {-# INLINE (*^) #-}+ a *^ v = v Geomancy.DVec2.^* a++ {-# INLINE (^/) #-}+ v ^/ a = v Geomancy.DVec2.^/ a++ {-# INLINE (^+^) #-}+ (^+^) = emap2 (+)++ {-# INLINE (^-^) #-}+ (^-^) = emap2 (-)++ {-# INLINE negateVector #-}+ negateVector = emap negate++ {-# INLINE dot #-}+ dot = Geomancy.DVec2.dot++ {-# INLINE normalize #-}+ normalize = Geomancy.DVec2.normalize
+ src/Geomancy/DVec3.hs view
@@ -0,0 +1,510 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+#endif++module Geomancy.DVec3+ ( DVec3+ , dvec3+ , withDVec3+ , pattern WithDVec3+ , convert+ , fromDVec2+ , fromTuple++ , (^*)+ , (^/)+ , lerp++ , cross+ , dot+ , normalize++ , Packed(..)+ , packed++ , emap2+ , emap3+ , emap4++ , fromVec3+ , toVec3+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Data.VectorSpace (VectorSpace)+import Data.VectorSpace qualified as VectorSpace+import Foreign (Storable(..), castPtr)+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Float (double2Float, float2Double)+import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..))+import WebColor.Labels (IsWebColor(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift(..))+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.DVec2 (DVec2, withDVec2)+import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))+import Geomancy.Vec3 (Vec3)+import Geomancy.Vec3 qualified as Vec3++data DVec3 = DVec3+ {-# UNPACK #-} !Double+ {-# UNPACK #-} !Double+ {-# UNPACK #-} !Double+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE dvec3 #-}+dvec3 :: Double -> Double -> Double -> DVec3+dvec3 = DVec3++{-# INLINE withDVec3 #-}+withDVec3+ :: DVec3+ -> (Double -> Double -> Double -> r)+ -> r+withDVec3 (DVec3 a b c) f = f a b c++{-# INLINE convert #-}+convert :: Coercible v DVec3 => (Double -> a) -> (a -> a -> a -> r) -> v -> r+convert f t v =+ withDVec3 (coerce v) \a b c ->+ t (f a) (f b) (f c)++pattern WithDVec3 :: Double -> Double -> Double -> DVec3+pattern WithDVec3 a b c <- ((`withDVec3` (,,)) -> (a, b, c))+{-# COMPLETE WithDVec3 #-}++instance HasField "x" DVec3 Double where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ _ -> x++instance HasField "y" DVec3 Double where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y _ -> y++instance HasField "z" DVec3 Double where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ _ z -> z++{-# INLINE fromDVec2 #-}+fromDVec2 :: Coercible DVec3 a => DVec2 -> Double -> a+fromDVec2 xy z =+ withDVec2 xy \x y ->+ coerce (dvec3 x y z)++{-# INLINE fromTuple #-}+fromTuple :: Coercible DVec3 a => (Double, Double, Double) -> a+fromTuple (x, y, z) = coerce (dvec3 x y z)++{-# INLINE fromVec3 #-}+fromVec3 :: Vec3 -> DVec3+fromVec3 = Vec3.convert float2Double dvec3++{-# INLINE toVec3 #-}+toVec3 :: DVec3 -> Vec3+toVec3 = convert double2Float Vec3.vec3++instance IsWebColor s => IsLabel s DVec3 where+ {-# INLINE fromLabel #-}+ fromLabel =+ webColor @s \r g b ->+ dvec3+ (fromIntegral r / 255)+ (fromIntegral g / 255)+ (fromIntegral b / 255)++instance NFData DVec3 where+ rnf DVec3{} = ()++type instance Element DVec3 = Double++instance MonoFunctor DVec3 where+ {-# INLINE omap #-}+ omap f v =+ withDVec3 v \x y z ->+ dvec3 (f x) (f y) (f z)++instance MonoPointed DVec3 where+ opoint x = dvec3 x x x++instance Elementwise DVec3 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withDVec3 p0 \x0 y0 z0 ->+ withDVec3 p1 \x1 y1 z1 ->+ dvec3+ (f x0 x1)+ (f y0 y1)+ (f z0 z1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withDVec3 p0 \x0 y0 z0 ->+ withDVec3 p1 \x1 y1 z1 ->+ withDVec3 p2 \x2 y2 z2 ->+ dvec3+ (f x0 x1 x2)+ (f y0 y1 y2)+ (f z0 z1 z2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withDVec3 p0 \x0 y0 z0 ->+ withDVec3 p1 \x1 y1 z1 ->+ withDVec3 p2 \x2 y2 z2 ->+ withDVec3 p3 \x3 y3 z3 ->+ dvec3+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)+ (f z0 z1 z2 z3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withDVec3 p0 \x0 y0 z0 ->+ withDVec3 p1 \x1 y1 z1 ->+ withDVec3 p2 \x2 y2 z2 ->+ withDVec3 p3 \x3 y3 z3 ->+ withDVec3 p4 \x4 y4 z4 ->+ dvec3+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)+ (f z0 z1 z2 z3 z4)++instance Num DVec3 where+ {-# INLINE (+) #-}+ DVec3 a b c + DVec3 d e f =+ DVec3+ (a + d)+ (b + e)+ (c + f)++ {-# INLINE (-) #-}+ DVec3 a b c - DVec3 d e f =+ DVec3+ (a - d)+ (b - e)+ (c - f)++ {-# INLINE (*) #-}+ DVec3 a b c * DVec3 d e f =+ DVec3+ (a * d)+ (b * e)+ (c * f)++ {-# INLINE abs #-}+ abs (DVec3 a b c) =+ DVec3 (abs a) (abs b) (abs c)++ {-# INLINE signum #-}+ signum (DVec3 a b c) =+ DVec3 (signum a) (signum b) (signum c)++ {-# INLINE fromInteger #-}+ fromInteger x = DVec3 x' x' x'+ where+ x' = fromInteger x++instance Fractional DVec3 where+ {-# INLINE (/) #-}+ DVec3 l1 l2 l3 / DVec3 r1 r2 r3 =+ DVec3 (l1 / r1) (l2 / r2) (l3 / r3)++ {-# INLINE recip #-}+ recip (DVec3 a b c) =+ DVec3 (recip a) (recip b) (recip c)++ {-# INLINE fromRational #-}+ fromRational x = DVec3 x' x' x'+ where+ x' = fromRational x++instance Floating DVec3 where+ pi = opoint pi++ exp = omap exp+ log = omap log+ sqrt = omap sqrt+ sin = omap sin+ cos = omap cos+ asin = omap asin+ acos = omap acos+ atan = omap atan+ sinh = omap sinh+ cosh = omap cosh+ asinh = omap asinh+ acosh = omap acosh+ atanh = omap atanh++ a ** b =+ withDVec3 a \ax ay az ->+ withDVec3 b \bx by bz ->+ dvec3+ (ax ** bx)+ (ay ** by)+ (az ** bz)++instance Storable DVec3 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr v3 =+ withDVec3 v3 \a b c -> do+ poke ptr' a+ pokeElemOff ptr' 1 b+ pokeElemOff ptr' 2 c+ pokeElemOff ptr' 3 (1.0 :: Double)+ where+ ptr' = castPtr ptr++ {-# INLINE peek #-}+ peek ptr =+ dvec3 <$> peek ptr' <*> peekElemOff ptr' 1 <*> peekElemOff ptr' 2+ where+ ptr' = castPtr ptr++instance Block DVec3 where+ type PackedSize DVec3 = 24+ alignment140 _ = 32+ sizeOf140 _ = 32+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked ptr diff = pokeDiffOff ptr (coerce diff) . Packed+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++#ifdef SERIALISE+instance Serialise DVec3 where+ encode v = withDVec3 v \x y z ->+ Serialise.encodeListLen 3 <> encode x <> encode y <> encode z+ decode =+ Serialise.decodeListLenOf 3 *> (dvec3 <$> decode <*> decode <*> decode)+#endif++{-# INLINE (^*) #-}+(^*) :: DVec3 -> Double -> DVec3+DVec3 a b c ^* x =+ DVec3+ (a * x)+ (b * x)+ (c * x)++{-# INLINE (^/) #-}+(^/) :: DVec3 -> Double -> DVec3+DVec3 a b c ^/ x =+ DVec3+ (a / x)+ (b / x)+ (c / x)++{-# INLINE lerp #-}+lerp :: Double -> DVec3 -> DVec3 -> DVec3+lerp alpha u v = u ^* alpha + v ^* (1 - alpha)++{-# INLINE cross #-}+cross :: DVec3 -> DVec3 -> DVec3+cross (DVec3 a b c) (DVec3 d e f) =+ DVec3+ (b * f - c * e)+ (c * d - a * f)+ (a * e - b * d)++{-# INLINE dot #-}+dot :: DVec3 -> DVec3 -> Double+dot (DVec3 a b c) (DVec3 d e f) =+ a * d ++ b * e ++ c * f++{-# INLINE normalize #-}+normalize :: DVec3 -> DVec3+normalize v =+ if nearZero q || nearZero (1-q) then+ v+ else+ let+ DVec3 x y z = v+ in+ DVec3 (x / l) (y / l) (z / l)++ where+ q = dot v v+ l = sqrt q++ nearZero a = abs a <= 1e-12++instance VectorSpace DVec3 Double where+ zeroVector = epoint 0++ {-# INLINE (*^) #-}+ (*^) = flip (Geomancy.DVec3.^*)++ {-# INLINE (^/) #-}+ (^/) = (Geomancy.DVec3.^/)++ {-# INLINE (^+^) #-}+ (^+^) = emap2 (+)++ {-# INLINE (^-^) #-}+ (^-^) = emap2 (-)++ {-# INLINE negateVector #-}+ negateVector = emap negate++ {-# INLINE dot #-}+ dot = Geomancy.DVec3.dot++ {-# INLINE normalize #-}+ normalize = Geomancy.DVec3.normalize++type instance Element Packed = Double++newtype Packed = Packed { unPacked :: DVec3 }+ deriving stock+ ( Eq, Ord, Show+ )+ deriving newtype+ ( NFData, Num, Fractional, Floating+ , MonoFunctor, MonoPointed+ , Elementwise+ )+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE packed #-}+packed :: Double -> Double -> Double -> Packed+packed x y z = Packed (dvec3 x y z)++instance HasField "x" Packed Double where+ {-# INLINE getField #-}+ getField (Packed v) = withDVec3 v \x _ _ -> x++instance HasField "y" Packed Double where+ {-# INLINE getField #-}+ getField (Packed v) = withDVec3 v \_ y _ -> y++instance HasField "z" Packed Double where+ {-# INLINE getField #-}+ getField (Packed v) = withDVec3 v \_ _ z -> z++instance Storable Packed where+ {-# INLINE sizeOf #-}+ sizeOf _ = 24++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr (Packed v3) =+ withDVec3 v3 \a b c -> do+ poke ptr' a+ pokeElemOff ptr' 1 b+ pokeElemOff ptr' 2 c+ where+ ptr' = castPtr ptr++ {-# INLINE peek #-}+ peek ptr = packed+ <$> peek ptr'+ <*> peekElemOff ptr' 1+ <*> peekElemOff ptr' 2+ where+ ptr' = castPtr ptr++instance Block Packed where+ type PackedSize Packed = 24+ alignment140 _ = 32+ sizeOf140 _ = 24+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance VectorSpace Packed Double where+ zeroVector = epoint 0++ {-# INLINE (*^) #-}+ (*^) = flip $ coerce (Geomancy.DVec3.^*)++ {-# INLINE (^/) #-}+ (^/) = coerce (Geomancy.DVec3.^/)++ {-# INLINE (^+^) #-}+ v1 ^+^ v2 = v1 + v2++ {-# INLINE (^-^) #-}+ v1 ^-^ v2 = v1 - v2++ {-# INLINE negateVector #-}+ negateVector = emap negate++ {-# INLINE dot #-}+ dot = coerce Geomancy.DVec3.dot++ {-# INLINE normalize #-}+ normalize = coerce Geomancy.DVec3.normalize
+ src/Geomancy/DVec4.hs view
@@ -0,0 +1,516 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE TemplateHaskell #-}+#endif++module Geomancy.DVec4+ ( DVec4(..)+ , dvec4+ , withDVec4+ , pattern WithDVec4+ , convert+ , fromDVec2+ , fromDVec22+ , fromDVec3+ , fromTuple++ , (^*)+ , (^/)+ , lerp++ , dot+ , normalize++ , newDVec4++ , fromVec4+ , toVec4+ ) where++import GHC.Exts hiding (VecCount(..), toList)++import Control.DeepSeq (NFData(rnf))+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Data.VectorSpace (VectorSpace)+import Data.VectorSpace qualified as VectorSpace+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Float (double2Float, float2Double)+import GHC.IO (IO(..))+import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..))+import Text.Printf (printf)+import WebColor.Labels (IsWebColorAlpha(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift(..))+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.DVec2 (DVec2, withDVec2)+import Geomancy.DVec3 (DVec3, withDVec3)+import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))+import Geomancy.Vec4 (Vec4)+import Geomancy.Vec4 qualified as Vec4++data DVec4 = DVec4 ByteArray#++{-# INLINE [1] dvec4 #-}+dvec4 :: Double -> Double -> Double -> Double -> DVec4+dvec4 v0 v1 v2 v3 =+ runRW# \world ->+ let+ !(# world_, arr #) = newByteArray# 32# world++ write i (D# v) = writeDoubleArray# arr i v++ world0 = write 0x0# v0 world_+ world1 = write 0x1# v1 world0+ world2 = write 0x2# v2 world1+ world3 = write 0x3# v3 world2+ !(# _world', arr' #) = unsafeFreezeByteArray# arr world3+ in+ DVec4 arr'++{-# INLINE [1] withDVec4 #-}+withDVec4+ :: DVec4+ -> (Double -> Double -> Double -> Double -> r)+ -> r+withDVec4 (DVec4 arr) f =+ f+ (D# (indexDoubleArray# arr 0x0#))+ (D# (indexDoubleArray# arr 0x1#))+ (D# (indexDoubleArray# arr 0x2#))+ (D# (indexDoubleArray# arr 0x3#))++{-# RULES+"withDVec4/dvec4" forall a b c d f.+ withDVec4 (dvec4 a b c d) f = f a b c d+"withDVec4/withDVec4" forall v k f.+ withDVec4 (withDVec4 v k) f = withDVec4 v \a b c d -> withDVec4 (k a b c d) f+ #-}++{-# INLINE convert #-}+convert :: Coercible v DVec4 => (Double -> a) -> (a -> a -> a -> a -> r) -> v -> r+convert f t v =+ withDVec4 (coerce v) \a b c d->+ t (f a) (f b) (f c) (f d)++instance Eq DVec4 where+ DVec4 a == DVec4 b = go 0#+ where+ go i+ | isTrue# (i ==# 4#) = True+ | isTrue# (indexDoubleArray# a i ==## indexDoubleArray# b i) = go (i +# 1#)+ | otherwise = False++instance Ord DVec4 where+ compare = lexicographic LT GT compare+ a < b = lexicographic True False (<) a b+ a <= b = not (b < a)+ a > b = b < a+ a >= b = not (a < b)++{-# INLINE lexicographic #-}+lexicographic :: r -> r -> (Double -> Double -> r) -> DVec4 -> DVec4 -> r+lexicographic lt gt lastElement (DVec4 a) (DVec4 b) = go 0#+ where+ go 3# = lastElement (D# (indexDoubleArray# a 3#)) (D# (indexDoubleArray# b 3#))+ go i =+ case compare (D# (indexDoubleArray# a i)) (D# (indexDoubleArray# b i)) of+ LT -> lt+ EQ -> go (i +# 1#)+ GT -> gt++instance Show DVec4 where+ show v =+ withDVec4 v $+ printf "DVec4 %.4f %.4f %.4f %.4f"++pattern WithDVec4 :: Double -> Double -> Double -> Double -> DVec4+pattern WithDVec4 a b c d <- ((`withDVec4` (,,,)) -> (a, b, c, d))+{-# COMPLETE WithDVec4 #-}++instance HasField "x" DVec4 Double where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ _ -> x++instance HasField "y" DVec4 Double where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ _ -> y++instance HasField "z" DVec4 Double where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z _ -> z++instance HasField "w" DVec4 Double where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ _ w -> w++{-# INLINE fromDVec2 #-}+fromDVec2 :: DVec2 -> Double -> Double -> DVec4+fromDVec2 xy z w =+ withDVec2 xy \x y ->+ dvec4 x y z w++{-# INLINE fromDVec22 #-}+fromDVec22 :: DVec2 -> DVec2 -> DVec4+fromDVec22 xy zw =+ withDVec2 xy \x y ->+ withDVec2 zw \z w ->+ dvec4 x y z w++{-# INLINE fromDVec3 #-}+fromDVec3 :: Coercible a DVec3 => a -> Double -> DVec4+fromDVec3 xyz w =+ withDVec3 (coerce xyz) \x y z ->+ dvec4 x y z w++{-# INLINE fromTuple #-}+fromTuple :: (Double, Double, Double, Double) -> DVec4+fromTuple (x, y, z, w) = dvec4 x y z w++{-# INLINE fromVec4 #-}+fromVec4 :: Vec4 -> DVec4+fromVec4 = Vec4.convert float2Double dvec4++{-# INLINE toVec4 #-}+toVec4 :: DVec4 -> Vec4+toVec4 = convert double2Float Vec4.vec4++instance IsWebColorAlpha s => IsLabel s DVec4 where+ {-# INLINE fromLabel #-}+ fromLabel =+ webColorAlpha @s \r g b a ->+ dvec4+ (fromIntegral r / 255)+ (fromIntegral g / 255)+ (fromIntegral b / 255)+ (fromIntegral a / 255)++instance NFData DVec4 where+ rnf DVec4{} = ()++#ifdef TH_LIFT+instance Lift DVec4 where+ lift (WithDVec4 a b c d) = [| dvec4 $(lift a) $(lift b) $(lift c) $(lift d) |]+ liftTyped (WithDVec4 a b c d) = [|| dvec4 $$(liftTyped a) $$(liftTyped b) $$(liftTyped c) $$(liftTyped d) ||]+#endif++type instance Element DVec4 = Double++instance MonoFunctor DVec4 where+ {-# INLINE omap #-}+ omap f v =+ withDVec4 v \x y z w ->+ dvec4 (f x) (f y) (f z) (f w)++instance MonoPointed DVec4 where+ {-# INLINE opoint #-}+ opoint x = dvec4 x x x x++instance Elementwise DVec4 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withDVec4 p0 \x0 y0 z0 w0 ->+ withDVec4 p1 \x1 y1 z1 w1 ->+ dvec4+ (f x0 x1)+ (f y0 y1)+ (f z0 z1)+ (f w0 w1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withDVec4 p0 \x0 y0 z0 w0 ->+ withDVec4 p1 \x1 y1 z1 w1 ->+ withDVec4 p2 \x2 y2 z2 w2 ->+ dvec4+ (f x0 x1 x2)+ (f y0 y1 y2)+ (f z0 z1 z2)+ (f w0 w1 w2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withDVec4 p0 \x0 y0 z0 w0 ->+ withDVec4 p1 \x1 y1 z1 w1 ->+ withDVec4 p2 \x2 y2 z2 w2 ->+ withDVec4 p3 \x3 y3 z3 w3 ->+ dvec4+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)+ (f z0 z1 z2 z3)+ (f w0 w1 w2 w3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withDVec4 p0 \x0 y0 z0 w0 ->+ withDVec4 p1 \x1 y1 z1 w1 ->+ withDVec4 p2 \x2 y2 z2 w2 ->+ withDVec4 p3 \x3 y3 z3 w3 ->+ withDVec4 p4 \x4 y4 z4 w4 ->+ dvec4+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)+ (f z0 z1 z2 z3 z4)+ (f w0 w1 w2 w3 w4)++instance Num DVec4 where+ {-# INLINE (+) #-}+ (+) l r =+ withDVec4 l \l1 l2 l3 l4 ->+ withDVec4 r \r1 r2 r3 r4 ->+ dvec4+ (l1 + r1)+ (l2 + r2)+ (l3 + r3)+ (l4 + r4)++ {-# INLINE (-) #-}+ (-) l r =+ withDVec4 l \l1 l2 l3 l4 ->+ withDVec4 r \r1 r2 r3 r4 ->+ dvec4+ (l1 - r1)+ (l2 - r2)+ (l3 - r3)+ (l4 - r4)++ {-# INLINE (*) #-}+ (*) l r =+ withDVec4 l \l1 l2 l3 l4 ->+ withDVec4 r \r1 r2 r3 r4 ->+ dvec4+ (l1 * r1)+ (l2 * r2)+ (l3 * r3)+ (l4 * r4)++ {-# INLINE abs #-}+ abs v =+ withDVec4 v \a b c d ->+ dvec4 (abs a) (abs b) (abs c) (abs d)++ {-# INLINE signum #-}+ signum v =+ withDVec4 v \a b c d ->+ dvec4 (signum a) (signum b) (signum c) (signum d)++ {-# INLINE fromInteger #-}+ fromInteger x = dvec4 x' x' x' x'+ where+ x' = fromInteger x++instance Fractional DVec4 where+ {-# INLINE (/) #-}+ (/) l r =+ withDVec4 l \l1 l2 l3 l4 ->+ withDVec4 r \r1 r2 r3 r4 ->+ dvec4 (l1 / r1) (l2 / r2) (l3 / r3) (l4 / r4)++ {-# INLINE recip #-}+ recip v =+ withDVec4 v \a b c d ->+ dvec4 (recip a) (recip b) (recip c) (recip d)++ {-# INLINE fromRational #-}+ fromRational x = dvec4 x' x' x' x'+ where+ x' = fromRational x++instance Floating DVec4 where+ pi = opoint pi++ {-# INLINE exp #-}+ exp = omap exp+ {-# INLINE log #-}+ log = omap log+ {-# INLINE sqrt #-}+ sqrt = omap sqrt+ {-# INLINE sin #-}+ sin = omap sin+ {-# INLINE cos #-}+ cos = omap cos+ {-# INLINE asin #-}+ asin = omap asin+ {-# INLINE acos #-}+ acos = omap acos+ {-# INLINE atan #-}+ atan = omap atan+ {-# INLINE sinh #-}+ sinh = omap sinh+ {-# INLINE cosh #-}+ cosh = omap cosh+ {-# INLINE asinh #-}+ asinh = omap asinh+ {-# INLINE acosh #-}+ acosh = omap acosh+ {-# INLINE atanh #-}+ atanh = omap atanh++ {-# INLINE (**) #-}+ a ** b =+ withDVec4 a \ax ay az aw ->+ withDVec4 b \bx by bz bw ->+ dvec4+ (ax ** bx)+ (ay ** by)+ (az ** bz)+ (aw ** bw)++instance Storable DVec4 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 32++ {-# INLINE poke #-}+ poke (Ptr addr) (DVec4 arr) = IO \world ->+ let+ world' = copyByteArrayToAddr# arr 0# addr 32# world+ in+ (# world', () #)++ {-# INLINE peek #-}+ peek (Ptr addr) = IO \world ->+ let+ !(# world0, v0 #) = readDoubleOffAddr# addr 0x0# world+ !(# world1, v1 #) = readDoubleOffAddr# addr 0x1# world0+ !(# world2, v2 #) = readDoubleOffAddr# addr 0x2# world1+ !(# world3, v3 #) = readDoubleOffAddr# addr 0x3# world2+ !v = dvec4 (D# v0) (D# v1) (D# v2) (D# v3)+ in+ (# world3, v #)++instance Block DVec4 where+ type PackedSize DVec4 = 32+ alignment140 _ = 32+ sizeOf140 = sizeOfPacked+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++#ifdef SERIALISE+instance Serialise DVec4 where+ encode v = withDVec4 v \x y z w ->+ Serialise.encodeListLen 4 <> encode x <> encode y <> encode z <> encode w+ decode =+ Serialise.decodeListLenOf 4 *> (dvec4 <$> decode <*> decode <*> decode <*> decode)+#endif++instance VectorSpace DVec4 Double where+ zeroVector = epoint 0++ {-# INLINE (*^) #-}+ (*^) = flip (Geomancy.DVec4.^*)++ {-# INLINE (^/) #-}+ (^/) = (Geomancy.DVec4.^/)++ {-# INLINE (^+^) #-}+ (^+^) = emap2 (+)++ {-# INLINE (^-^) #-}+ (^-^) = emap2 (-)++ {-# INLINE negateVector #-}+ negateVector = emap negate++ {-# INLINE dot #-}+ dot = Geomancy.DVec4.dot++ {-# INLINE normalize #-}+ normalize = Geomancy.DVec4.normalize++{-# INLINE (^*) #-}+(^*) :: DVec4 -> Double -> DVec4+(^*) v x =+ withDVec4 v \a b c d ->+ dvec4+ (a * x)+ (b * x)+ (c * x)+ (d * x)++{-# INLINE (^/) #-}+(^/) :: DVec4 -> Double -> DVec4+v ^/ x = v ^* recip x++{-# INLINE lerp #-}+lerp :: Double -> DVec4 -> DVec4 -> DVec4+lerp alpha u v = u ^* alpha + v ^* (1 - alpha)++{-# INLINE dot #-}+dot :: DVec4 -> DVec4 -> Double+dot a b =+ withDVec4 a \a1 a2 a3 a4 ->+ withDVec4 b \b1 b2 b3 b4 ->+ a1 * b1 ++ a2 * b2 ++ a3 * b3 ++ a4 * b4++{-# INLINE normalize #-}+normalize :: DVec4 -> DVec4+normalize v =+ if nearZero q || nearZero (1-q) then+ v+ else+ v ^/ l++ where+ q = dot v v+ l = sqrt q++ nearZero a = abs a <= 1e-12++{-# INLINE newDVec4 #-}+newDVec4 :: IO DVec4+newDVec4 =+ IO \world ->+ let+ !(# world_, arr_ #) = newByteArray# 32# world+ !(# world', arr #) = unsafeFreezeByteArray# arr_ world_+ in+ (# world', DVec4 arr #)
+ src/Geomancy/I64Vec2.hs view
@@ -0,0 +1,255 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif+++module Geomancy.I64Vec2+ ( I64Vec2+ , i64vec2+ , withI64Vec2+ , pattern WithI64Vec2+ , convert+ , fromTuple+ , dot+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.Int (Int64)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Ix (Ix(..))+import GHC.Records (HasField(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift(..))+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))++data I64Vec2 = I64Vec2+ {-# UNPACK #-} !Int64+ {-# UNPACK #-} !Int64+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE i64vec2 #-}+i64vec2 :: Int64 -> Int64 -> I64Vec2+i64vec2 = I64Vec2++{-# INLINE withI64Vec2 #-}+withI64Vec2+ :: I64Vec2+ -> (Int64 -> Int64 -> r)+ -> r+withI64Vec2 (I64Vec2 a b) f = f a b++{-# INLINE convert #-}+convert :: Coercible v I64Vec2 => (Int64 -> a) -> (a -> a -> r) -> v -> r+convert f t v =+ withI64Vec2 (coerce v) \a b ->+ t (f a) (f b)++pattern WithI64Vec2 :: Int64 -> Int64 -> I64Vec2+pattern WithI64Vec2 a b <- ((`withI64Vec2` (,)) -> (a, b))+{-# COMPLETE WithI64Vec2 #-}++instance HasField "x" I64Vec2 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x _ -> x++instance HasField "y" I64Vec2 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \_ y -> y++{-# INLINE fromTuple #-}+fromTuple :: (Int64, Int64) -> I64Vec2+fromTuple (x, y) = i64vec2 x y++{-# INLINE dot #-}+dot :: I64Vec2 -> I64Vec2 -> Int64+dot (I64Vec2 l1 l2) (I64Vec2 r1 r2) =+ l1 * r1 + l2 * r2++instance NFData I64Vec2 where+ rnf I64Vec2{} = ()++type instance Element I64Vec2 = Int64++instance MonoFunctor I64Vec2 where+ {-# INLINE omap #-}+ omap f v =+ withI64Vec2 v \x y ->+ i64vec2 (f x) (f y)++instance MonoPointed I64Vec2 where+ {-# INLINE opoint #-}+ opoint x = i64vec2 x x++instance Elementwise I64Vec2 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withI64Vec2 p0 \x0 y0 ->+ withI64Vec2 p1 \x1 y1 ->+ i64vec2+ (f x0 x1)+ (f y0 y1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withI64Vec2 p0 \x0 y0 ->+ withI64Vec2 p1 \x1 y1 ->+ withI64Vec2 p2 \x2 y2 ->+ i64vec2+ (f x0 x1 x2)+ (f y0 y1 y2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withI64Vec2 p0 \x0 y0 ->+ withI64Vec2 p1 \x1 y1 ->+ withI64Vec2 p2 \x2 y2 ->+ withI64Vec2 p3 \x3 y3 ->+ i64vec2+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withI64Vec2 p0 \x0 y0 ->+ withI64Vec2 p1 \x1 y1 ->+ withI64Vec2 p2 \x2 y2 ->+ withI64Vec2 p3 \x3 y3 ->+ withI64Vec2 p4 \x4 y4 ->+ i64vec2+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)++instance Num I64Vec2 where+ {-# INLINE (+) #-}+ I64Vec2 l1 l2 + I64Vec2 r1 r2 =+ I64Vec2+ (l1 + r1)+ (l2 + r2)++ {-# INLINE (-) #-}+ I64Vec2 l1 l2 - I64Vec2 r1 r2 =+ I64Vec2+ (l1 - r1)+ (l2 - r2)++ {-# INLINE (*) #-}+ I64Vec2 l1 l2 * I64Vec2 r1 r2 =+ I64Vec2+ (l1 * r1)+ (l2 * r2)++ {-# INLINE abs #-}+ abs (I64Vec2 a b) =+ I64Vec2 (abs a) (abs b)++ {-# INLINE signum #-}+ signum v2 = withI64Vec2 v2 \a b ->+ i64vec2 (signum a) (signum b)++ {-# INLINE fromInteger #-}+ fromInteger x = I64Vec2 x' x'+ where+ x' = fromInteger x++instance Storable I64Vec2 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 16++ {-# INLINE alignment #-}+ alignment _ = 16++ {-# INLINE poke #-}+ poke ptr v4 =+ withI64Vec2 v4 \a b -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b++ {-# INLINE peek #-}+ peek ptr = i64vec2+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8++instance Block I64Vec2 where+ type PackedSize I64Vec2 = 16+ alignment140 _ = 16+ sizeOf140 _ = 16+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Ix I64Vec2 where+ {-# INLINE range #-}+ range (l, u) =+ withI64Vec2 l \l1 l2 ->+ withI64Vec2 u \u1 u2 ->+ i64vec2+ <$> range (l1, u1)+ <*> range (l2, u2)++ {-# INLINE unsafeIndex #-}+ unsafeIndex (l, u) i =+ withI64Vec2 l \l1 l2 ->+ withI64Vec2 u \u1 u2 ->+ withI64Vec2 i \i1 i2 ->+ unsafeIndex (l2, u2) i2 + unsafeRangeSize (l2, u2) *+ unsafeIndex (l1, u1) i1++ {-# INLINE inRange #-}+ inRange (l, u) i =+ withI64Vec2 l \l1 l2 ->+ withI64Vec2 u \u1 u2 ->+ withI64Vec2 i \i1 i2 ->+ inRange (l1, u1) i1 &&+ inRange (l2, u2) i2++#ifdef SERIALISE+instance Serialise I64Vec2 where+ encode v = withI64Vec2 v \x y ->+ Serialise.encodeListLen 2 <> encode x <> encode y+ decode =+ Serialise.decodeListLenOf 2 *> (i64vec2 <$> decode <*> decode)+#endif
+ src/Geomancy/I64Vec3.hs view
@@ -0,0 +1,339 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif+++module Geomancy.I64Vec3+ ( I64Vec3+ , i64vec3+ , withI64Vec3+ , pattern WithI64Vec3+ , convert+ , fromTuple+ , dot++ , Packed(..)+ , packed+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.Int (Int64)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Ix (Ix(..))+import GHC.Records (HasField(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))++data I64Vec3 = I64Vec3+ {-# UNPACK #-} !Int64+ {-# UNPACK #-} !Int64+ {-# UNPACK #-} !Int64+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE i64vec3 #-}+i64vec3 :: Int64 -> Int64 -> Int64 -> I64Vec3+i64vec3 = I64Vec3++{-# INLINE withI64Vec3 #-}+withI64Vec3+ :: I64Vec3+ -> (Int64 -> Int64 -> Int64 -> r)+ -> r+withI64Vec3 (I64Vec3 a b c) f = f a b c++pattern WithI64Vec3 :: Int64 -> Int64 -> Int64 -> I64Vec3+pattern WithI64Vec3 a b c <- ((`withI64Vec3` (,,)) -> (a, b, c))+{-# COMPLETE WithI64Vec3 #-}++instance HasField "x" I64Vec3 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ _ -> x++instance HasField "y" I64Vec3 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y _ -> y++instance HasField "z" I64Vec3 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ _ z -> z++{-# INLINE convert #-}+convert :: Coercible v I64Vec3 => (Int64 -> a) -> (a -> a -> a -> r) -> v -> r+convert f t v =+ withI64Vec3 (coerce v) \a b c ->+ t (f a) (f b) (f c)++{-# INLINE fromTuple #-}+fromTuple :: (Int64, Int64, Int64) -> I64Vec3+fromTuple (a, b, c) = i64vec3 a b c++{-# INLINE dot #-}+dot :: I64Vec3 -> I64Vec3 -> Int64+dot (I64Vec3 l1 l2 l3) (I64Vec3 r1 r2 r3) =+ l1 * r1 + l2 * r2 + l3 * r3++instance NFData I64Vec3 where+ rnf I64Vec3{} = ()++type instance Element I64Vec3 = Int64++instance MonoFunctor I64Vec3 where+ {-# INLINE omap #-}+ omap f v =+ withI64Vec3 v \x y z ->+ i64vec3 (f x) (f y) (f z)++instance MonoPointed I64Vec3 where+ opoint x = i64vec3 x x x++instance Elementwise I64Vec3 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withI64Vec3 p0 \x0 y0 z0 ->+ withI64Vec3 p1 \x1 y1 z1 ->+ i64vec3+ (f x0 x1)+ (f y0 y1)+ (f z0 z1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withI64Vec3 p0 \x0 y0 z0 ->+ withI64Vec3 p1 \x1 y1 z1 ->+ withI64Vec3 p2 \x2 y2 z2 ->+ i64vec3+ (f x0 x1 x2)+ (f y0 y1 y2)+ (f z0 z1 z2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withI64Vec3 p0 \x0 y0 z0 ->+ withI64Vec3 p1 \x1 y1 z1 ->+ withI64Vec3 p2 \x2 y2 z2 ->+ withI64Vec3 p3 \x3 y3 z3 ->+ i64vec3+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)+ (f z0 z1 z2 z3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withI64Vec3 p0 \x0 y0 z0 ->+ withI64Vec3 p1 \x1 y1 z1 ->+ withI64Vec3 p2 \x2 y2 z2 ->+ withI64Vec3 p3 \x3 y3 z3 ->+ withI64Vec3 p4 \x4 y4 z4 ->+ i64vec3+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)+ (f z0 z1 z2 z3 z4)++instance Num I64Vec3 where+ {-# INLINE (+) #-}+ I64Vec3 l1 l2 l3 + I64Vec3 r1 r2 r3 =+ I64Vec3+ (l1 + r1)+ (l2 + r2)+ (l3 + r3)++ {-# INLINE (-) #-}+ I64Vec3 l1 l2 l3 - I64Vec3 r1 r2 r3 =+ I64Vec3+ (l1 - r1)+ (l2 - r2)+ (l3 - r3)++ {-# INLINE (*) #-}+ I64Vec3 l1 l2 l3 * I64Vec3 r1 r2 r3 =+ I64Vec3+ (l1 * r1)+ (l2 * r2)+ (l3 * r3)++ {-# INLINE abs #-}+ abs v3 = withI64Vec3 v3 \a b c ->+ i64vec3 (abs a) (abs b) (abs c)++ {-# INLINE signum #-}+ signum v3 = withI64Vec3 v3 \a b c ->+ i64vec3 (signum a) (signum b) (signum c)++ {-# INLINE fromInteger #-}+ fromInteger x = I64Vec3 x' x' x'+ where+ x' = fromInteger x++instance Storable I64Vec3 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr v3 =+ withI64Vec3 v3 \a b c -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b+ pokeByteOff ptr 16 c++ {-# INLINE peek #-}+ peek ptr = i64vec3+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8+ <*> peekByteOff ptr 16++newtype Packed = Packed { unPacked :: I64Vec3 }+ deriving (Eq, Ord, Show, NFData, Num)++{-# INLINE packed #-}+packed :: Int64 -> Int64 -> Int64 -> Packed+packed a b c = Packed (i64vec3 a b c)++instance HasField "x" Packed Int64 where+ {-# INLINE getField #-}+ getField (Packed v) = withI64Vec3 v \x _ _ -> x++instance HasField "y" Packed Int64 where+ {-# INLINE getField #-}+ getField (Packed v) = withI64Vec3 v \_ y _ -> y++instance HasField "z" Packed Int64 where+ {-# INLINE getField #-}+ getField (Packed v) = withI64Vec3 v \_ _ z -> z++instance Storable Packed where+ {-# INLINE sizeOf #-}+ sizeOf _ = 24++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr (Packed v3) =+ withI64Vec3 v3 \a b c -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b+ pokeByteOff ptr 16 c++ {-# INLINE peek #-}+ peek ptr = packed+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8+ <*> peekByteOff ptr 16++instance Block I64Vec3 where+ type PackedSize I64Vec3 = 24+ alignment140 _ = 32+ sizeOf140 _ = 32+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Block Packed where+ type PackedSize Packed = 24+ alignment140 _ = 32+ sizeOf140 _ = 24+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Ix I64Vec3 where+ {-# INLINE range #-}+ range (l, u) =+ withI64Vec3 l \l1 l2 l3 ->+ withI64Vec3 u \u1 u2 u3 ->+ i64vec3+ <$> range (l1, u1)+ <*> range (l2, u2)+ <*> range (l3, u3)++ {-# INLINE unsafeIndex #-}+ unsafeIndex (l, u) i =+ withI64Vec3 l \l1 l2 l3 ->+ withI64Vec3 u \u1 u2 u3 ->+ withI64Vec3 i \i1 i2 i3 ->+ unsafeIndex (l3, u3) i3 + unsafeRangeSize (l3, u3) * (+ unsafeIndex (l2, u2) i2 + unsafeRangeSize (l2, u2) * (+ unsafeIndex (l1, u1) i1))++ {-# INLINE inRange #-}+ inRange (l, u) i =+ withI64Vec3 l \l1 l2 l3 ->+ withI64Vec3 u \u1 u2 u3 ->+ withI64Vec3 i \i1 i2 i3 ->+ inRange (l1, u1) i1 &&+ inRange (l2, u2) i2 &&+ inRange (l3, u3) i3++#ifdef SERIALISE+instance Serialise I64Vec3 where+ encode v = withI64Vec3 v \x y z ->+ Serialise.encodeListLen 3 <> encode x <> encode y <> encode z+ decode =+ Serialise.decodeListLenOf 3 *> (i64vec3 <$> decode <*> decode <*> decode)+#endif
+ src/Geomancy/I64Vec4.hs view
@@ -0,0 +1,288 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif+++module Geomancy.I64Vec4+ ( I64Vec4+ , i64vec4+ , withI64Vec4+ , pattern WithI64Vec4+ , convert+ , fromTuple+ , dot+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.Int (Int64)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Ix (Ix(..))+import GHC.Records (HasField(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))++data I64Vec4 = I64Vec4+ {-# UNPACK #-} !Int64+ {-# UNPACK #-} !Int64+ {-# UNPACK #-} !Int64+ {-# UNPACK #-} !Int64+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE i64vec4 #-}+i64vec4 :: Int64 -> Int64 -> Int64 -> Int64 -> I64Vec4+i64vec4 = I64Vec4++{-# INLINE withI64Vec4 #-}+withI64Vec4+ :: I64Vec4+ -> (Int64 -> Int64 -> Int64 -> Int64 -> r)+ -> r+withI64Vec4 (I64Vec4 a b c d) f = f a b c d++pattern WithI64Vec4 :: Int64 -> Int64 -> Int64 -> Int64 -> I64Vec4+pattern WithI64Vec4 a b c d <- ((`withI64Vec4` (,,,)) -> (a, b, c, d))+{-# COMPLETE WithI64Vec4 #-}++instance HasField "x" I64Vec4 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ _ -> x++instance HasField "y" I64Vec4 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ _ -> y++instance HasField "z" I64Vec4 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z _ -> z++instance HasField "w" I64Vec4 Int64 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ _ w -> w++{-# INLINE convert #-}+convert :: Coercible v I64Vec4 => (Int64 -> a) -> (a -> a -> a -> a -> r) -> v -> r+convert f t v =+ withI64Vec4 (coerce v) \a b c d ->+ t (f a) (f b) (f c) (f d)++{-# INLINE fromTuple #-}+fromTuple :: (Int64, Int64, Int64, Int64) -> I64Vec4+fromTuple (x, y, z, w) = i64vec4 x y z w++{-# INLINE dot #-}+dot :: I64Vec4 -> I64Vec4 -> Int64+dot (I64Vec4 l1 l2 l3 l4) (I64Vec4 r1 r2 r3 r4) =+ l1 * r1 + l2 * r2 + l3 * r3 + l4 * r4++instance NFData I64Vec4 where+ rnf I64Vec4{} = ()++type instance Element I64Vec4 = Int64++instance MonoFunctor I64Vec4 where+ {-# INLINE omap #-}+ omap f v =+ withI64Vec4 v \x y z w ->+ i64vec4 (f x) (f y) (f z) (f w)++instance MonoPointed I64Vec4 where+ opoint x = i64vec4 x x x x++instance Elementwise I64Vec4 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withI64Vec4 p0 \x0 y0 z0 w0 ->+ withI64Vec4 p1 \x1 y1 z1 w1 ->+ i64vec4+ (f x0 x1)+ (f y0 y1)+ (f z0 z1)+ (f w0 w1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withI64Vec4 p0 \x0 y0 z0 w0 ->+ withI64Vec4 p1 \x1 y1 z1 w1 ->+ withI64Vec4 p2 \x2 y2 z2 w2 ->+ i64vec4+ (f x0 x1 x2)+ (f y0 y1 y2)+ (f z0 z1 z2)+ (f w0 w1 w2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withI64Vec4 p0 \x0 y0 z0 w0 ->+ withI64Vec4 p1 \x1 y1 z1 w1 ->+ withI64Vec4 p2 \x2 y2 z2 w2 ->+ withI64Vec4 p3 \x3 y3 z3 w3 ->+ i64vec4+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)+ (f z0 z1 z2 z3)+ (f w0 w1 w2 w3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withI64Vec4 p0 \x0 y0 z0 w0 ->+ withI64Vec4 p1 \x1 y1 z1 w1 ->+ withI64Vec4 p2 \x2 y2 z2 w2 ->+ withI64Vec4 p3 \x3 y3 z3 w3 ->+ withI64Vec4 p4 \x4 y4 z4 w4 ->+ i64vec4+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)+ (f z0 z1 z2 z3 z4)+ (f w0 w1 w2 w3 w4)++instance Num I64Vec4 where+ {-# INLINE (+) #-}+ I64Vec4 l1 l2 l3 l4 + I64Vec4 r1 r2 r3 r4 =+ I64Vec4+ (l1 + r1)+ (l2 + r2)+ (l3 + r3)+ (l4 + r4)++ {-# INLINE (-) #-}+ I64Vec4 l1 l2 l3 l4 - I64Vec4 r1 r2 r3 r4 =+ I64Vec4+ (l1 - r1)+ (l2 - r2)+ (l3 - r3)+ (l4 - r4)++ {-# INLINE (*) #-}+ I64Vec4 l1 l2 l3 l4 * I64Vec4 r1 r2 r3 r4 =+ I64Vec4+ (l1 * r1)+ (l2 * r2)+ (l3 * r3)+ (l4 * r4)++ {-# INLINE abs #-}+ abs v4 = withI64Vec4 v4 \a b c d ->+ i64vec4 (abs a) (abs b) (abs c) (abs d)++ {-# INLINE signum #-}+ signum v4 = withI64Vec4 v4 \a b c d ->+ i64vec4 (signum a) (signum b) (signum c) (signum d)++ {-# INLINE fromInteger #-}+ fromInteger x = I64Vec4 x' x' x' x'+ where+ x' = fromInteger x++instance Storable I64Vec4 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr v4 =+ withI64Vec4 v4 \a b c d -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b+ pokeByteOff ptr 16 c+ pokeByteOff ptr 24 d++ {-# INLINE peek #-}+ peek ptr = i64vec4+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8+ <*> peekByteOff ptr 16+ <*> peekByteOff ptr 24++instance Block I64Vec4 where+ type PackedSize I64Vec4 = 32+ alignment140 _ = 32+ sizeOf140 _ = 32+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Ix I64Vec4 where+ {-# INLINE range #-}+ range (l, u) =+ withI64Vec4 l \l1 l2 l3 l4 ->+ withI64Vec4 u \u1 u2 u3 u4 ->+ i64vec4+ <$> range (l1, u1)+ <*> range (l2, u2)+ <*> range (l3, u3)+ <*> range (l4, u4)++ {-# INLINE unsafeIndex #-}+ unsafeIndex (l, u) i =+ withI64Vec4 l \l1 l2 l3 l4 ->+ withI64Vec4 u \u1 u2 u3 u4 ->+ withI64Vec4 i \i1 i2 i3 i4 ->+ unsafeIndex (l4, u4) i4 + unsafeRangeSize (l4, u4) * (+ unsafeIndex (l3, u3) i3 + unsafeRangeSize (l3, u3) * (+ unsafeIndex (l2, u2) i2 + unsafeRangeSize (l2, u2) * (+ unsafeIndex (l1, u1) i1)))++ {-# INLINE inRange #-}+ inRange (l, u) i =+ withI64Vec4 l \l1 l2 l3 l4 ->+ withI64Vec4 u \u1 u2 u3 u4 ->+ withI64Vec4 i \i1 i2 i3 i4 ->+ inRange (l1, u1) i1 &&+ inRange (l2, u2) i2 &&+ inRange (l3, u3) i3 &&+ inRange (l4, u4) i4++#ifdef SERIALISE+instance Serialise I64Vec4 where+ encode v = withI64Vec4 v \x y z w ->+ Serialise.encodeListLen 4 <> encode x <> encode y <> encode z <> encode w+ decode =+ Serialise.decodeListLenOf 4 *> (i64vec4 <$> decode <*> decode <*> decode <*> decode)+#endif
src/Geomancy/IVec2.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-}@@ -30,6 +32,7 @@ import Foreign (Storable(..)) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.Ix (Ix(..))+import GHC.Records (HasField(..)) #ifdef TH_LIFT import Language.Haskell.TH.Syntax (Lift(..))@@ -72,6 +75,14 @@ pattern WithIVec2 :: Int32 -> Int32 -> IVec2 pattern WithIVec2 a b <- ((`withIVec2` (,)) -> (a, b)) {-# COMPLETE WithIVec2 #-}++instance HasField "x" IVec2 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x _ -> x++instance HasField "y" IVec2 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \_ y -> y {-# INLINE fromTuple #-} fromTuple :: (Int32, Int32) -> IVec2
src/Geomancy/IVec3.hs view
@@ -2,7 +2,9 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-}@@ -34,6 +36,7 @@ import Foreign (Storable(..)) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.Ix (Ix(..))+import GHC.Records (HasField(..)) #ifdef TH_LIFT import Language.Haskell.TH.Syntax (Lift)@@ -72,6 +75,18 @@ pattern WithIVec3 a b c <- ((`withIVec3` (,,)) -> (a, b, c)) {-# COMPLETE WithIVec3 #-} +instance HasField "x" IVec3 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ _ -> x++instance HasField "y" IVec3 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y _ -> y++instance HasField "z" IVec3 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ _ z -> z+ {-# INLINE convert #-} convert :: Coercible v IVec3 => (Int32 -> a) -> (a -> a -> a -> r) -> v -> r convert f t v =@@ -168,7 +183,8 @@ (l3 * r3) {-# INLINE abs #-}- abs x = x+ abs v3 = withIVec3 v3 \a b c ->+ ivec3 (abs a) (abs b) (abs c) {-# INLINE signum #-} signum v3 = withIVec3 v3 \a b c ->@@ -206,6 +222,18 @@ packed :: Int32 -> Int32 -> Int32 -> Packed packed a b c = Packed (ivec3 a b c) +instance HasField "x" Packed Int32 where+ {-# INLINE getField #-}+ getField (Packed v) = withIVec3 v \x _ _ -> x++instance HasField "y" Packed Int32 where+ {-# INLINE getField #-}+ getField (Packed v) = withIVec3 v \_ y _ -> y++instance HasField "z" Packed Int32 where+ {-# INLINE getField #-}+ getField (Packed v) = withIVec3 v \_ _ z -> z+ instance Storable Packed where {-# INLINE sizeOf #-} sizeOf _ = 12@@ -253,8 +281,8 @@ instance Block Packed where type PackedSize Packed = 12- alignment140 _ = 12- sizeOf140 _ = 16+ alignment140 _ = 16+ sizeOf140 _ = 12 alignment430 = alignment140 sizeOf430 = sizeOf140 isStruct _ = False
src/Geomancy/IVec4.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-}@@ -30,6 +32,7 @@ import Foreign (Storable(..)) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.Ix (Ix(..))+import GHC.Records (HasField(..)) #ifdef TH_LIFT import Language.Haskell.TH.Syntax (Lift)@@ -69,6 +72,22 @@ pattern WithIVec4 a b c d <- ((`withIVec4` (,,,)) -> (a, b, c, d)) {-# COMPLETE WithIVec4 #-} +instance HasField "x" IVec4 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ _ -> x++instance HasField "y" IVec4 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ _ -> y++instance HasField "z" IVec4 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z _ -> z++instance HasField "w" IVec4 Int32 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ _ w -> w+ {-# INLINE convert #-} convert :: Coercible v IVec4 => (Int32 -> a) -> (a -> a -> a -> a -> r) -> v -> r convert f t v =@@ -172,7 +191,8 @@ (l4 * r4) {-# INLINE abs #-}- abs x = x+ abs v4 = withIVec4 v4 \a b c d ->+ ivec4 (abs a) (abs b) (abs c) (abs d) {-# INLINE signum #-} signum v4 = withIVec4 v4 \a b c d ->
src/Geomancy/Mat4/Internal.hs view
@@ -54,6 +54,14 @@ data Mat4 = Mat4 ByteArray# +instance Eq Mat4 where+ Mat4 a == Mat4 b = go 0#+ where+ go i+ | isTrue# (i ==# 16#) = True+ | isTrue# (eqFloat# (indexFloatArray# a i) (indexFloatArray# b i)) = go (i +# 1#)+ | otherwise = False+ instance NFData Mat4 where rnf Mat4{} = () @@ -67,34 +75,36 @@ -> Float -> Float -> Float -> Float -> Mat4 fromMemory- (F# e0) (F# e1) (F# e2) (F# e3)- (F# e4) (F# e5) (F# e6) (F# e7)- (F# e8) (F# e9) (F# ea) (F# eb)- (F# ec) (F# ed) (F# ee) (F# ef) =+ e0 e1 e2 e3+ e4 e5 e6 e7+ e8 e9 ea eb+ ec ed ee ef = runRW# \world -> let- !(# world_, arr #) = newAlignedPinnedByteArray# 64# 16# world+ !(# world_, arr #) = newByteArray# 64# world - world0 = writeFloatArray# arr 0x0# e0 world_- world1 = writeFloatArray# arr 0x1# e1 world0- world2 = writeFloatArray# arr 0x2# e2 world1- world3 = writeFloatArray# arr 0x3# e3 world2+ write i (F# e) = writeFloatArray# arr i e - world4 = writeFloatArray# arr 0x4# e4 world3- world5 = writeFloatArray# arr 0x5# e5 world4- world6 = writeFloatArray# arr 0x6# e6 world5- world7 = writeFloatArray# arr 0x7# e7 world6+ world0 = write 0x0# e0 world_+ world1 = write 0x1# e1 world0+ world2 = write 0x2# e2 world1+ world3 = write 0x3# e3 world2 - world8 = writeFloatArray# arr 0x8# e8 world7- world9 = writeFloatArray# arr 0x9# e9 world8- worldA = writeFloatArray# arr 0xA# ea world9- worldB = writeFloatArray# arr 0xB# eb worldA+ world4 = write 0x4# e4 world3+ world5 = write 0x5# e5 world4+ world6 = write 0x6# e6 world5+ world7 = write 0x7# e7 world6 - worldC = writeFloatArray# arr 0xC# ec worldB- worldD = writeFloatArray# arr 0xD# ed worldC- worldE = writeFloatArray# arr 0xE# ee worldD- worldF = writeFloatArray# arr 0xF# ef worldE+ world8 = write 0x8# e8 world7+ world9 = write 0x9# e9 world8+ worldA = write 0xA# ea world9+ worldB = write 0xB# eb worldA + worldC = write 0xC# ec worldB+ worldD = write 0xD# ed worldC+ worldE = write 0xE# ee worldD+ worldF = write 0xF# ef worldE+ !(# _world', arr' #) = unsafeFreezeByteArray# arr worldF in Mat4 arr'@@ -213,10 +223,10 @@ newMat4 = IO \world -> let- !(# world_, arr_ #) = newAlignedPinnedByteArray# 64# 16# world- !(# _world', arr #) = unsafeFreezeByteArray# arr_ world_+ !(# world_, arr_ #) = newByteArray# 64# world+ !(# world', arr #) = unsafeFreezeByteArray# arr_ world_ in- (# world, Mat4 arr #)+ (# world', Mat4 arr #) {-# INLINE scalarMultiply #-} scalarMultiply :: Float -> Mat4 -> Mat4@@ -247,11 +257,36 @@ {-# INLINE peek #-} peek (Ptr addr) = IO \world -> let- !(# world0, arr #) = newAlignedPinnedByteArray# 64# 16# world- world1 = copyAddrToByteArray# addr arr 0# 64# world0- !(# world', arr' #) = unsafeFreezeByteArray# arr world1+ loadPair i = readWord64OffAddr# addr i++ !(# world0, pair0 #) = loadPair 0x0# world+ !(# world1, pair1 #) = loadPair 0x1# world0+ !(# world2, pair2 #) = loadPair 0x2# world1+ !(# world3, pair3 #) = loadPair 0x3# world2+ !(# world4, pair4 #) = loadPair 0x4# world3+ !(# world5, pair5 #) = loadPair 0x5# world4+ !(# world6, pair6 #) = loadPair 0x6# world5+ !(# world', pair7 #) = loadPair 0x7# world6++ !mat = runRW# \fresh ->+ let+ !(# fresh_, arr #) = newByteArray# 64# fresh++ storePair i pair = writeWord64Array# arr i pair++ fresh0 = storePair 0x0# pair0 fresh_+ fresh1 = storePair 0x1# pair1 fresh0+ fresh2 = storePair 0x2# pair2 fresh1+ fresh3 = storePair 0x3# pair3 fresh2+ fresh4 = storePair 0x4# pair4 fresh3+ fresh5 = storePair 0x5# pair5 fresh4+ fresh6 = storePair 0x6# pair6 fresh5+ fresh7 = storePair 0x7# pair7 fresh6+ !(# _fresh', arr' #) = unsafeFreezeByteArray# arr fresh7+ in+ Mat4 arr' in- (# world', Mat4 arr' #)+ (# world', mat #) instance Block Mat4 where type PackedSize Mat4 = 64
src/Geomancy/Point.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-}@@ -11,6 +12,7 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} @@ -26,6 +28,11 @@ , Point3P , Point4 + , DPoint2+ , DPoint3+ , DPoint3P+ , DPoint4+ , AffineSpace , (AffineSpace..+^) , (AffineSpace..-^)@@ -42,6 +49,7 @@ import Foreign.Storable (Storable) import GHC.Generics (Generic) import GHC.Ix (Ix)+import GHC.Records (HasField(..)) import GHC.TypeNats (KnownNat) import qualified Data.AffineSpace as AffineSpace @@ -53,12 +61,16 @@ import Codec.Serialise (Serialise) #endif +import Geomancy.DVec2 (DVec2)+import Geomancy.DVec3 (DVec3) import Geomancy.Elementwise (Elementwise(..)) import Graphics.Gl.Block (Block(..)) import Geomancy.Vec2 (Vec2) import Geomancy.Vec3 (Vec3, Packed) import Geomancy.Vec4 (Vec4)+import Geomancy.DVec4 (DVec4) import Geomancy.Vector (VectorSpace(..))+import qualified Geomancy.DVec3 as DVec3 import qualified Geomancy.Vector as Vector newtype Point v = Point v@@ -79,12 +91,33 @@ type instance Element (Point v) = Element v +instance HasField "x" v a => HasField "x" (Point v) a where+ {-# INLINE getField #-}+ getField (Point v) = getField @"x" v++instance HasField "y" v a => HasField "y" (Point v) a where+ {-# INLINE getField #-}+ getField (Point v) = getField @"y" v++instance HasField "z" v a => HasField "z" (Point v) a where+ {-# INLINE getField #-}+ getField (Point v) = getField @"z" v++instance HasField "w" v a => HasField "w" (Point v) a where+ {-# INLINE getField #-}+ getField (Point v) = getField @"w" v+ type Point2 = Point Vec2 type Point3 = Point Vec3 type Point3P = Point Packed type Point4 = Point Vec4 -instance VectorSpace v Float => AffineSpace (Point v) v Float where+type DPoint2 = Point DVec2+type DPoint3 = Point DVec3+type DPoint3P = Point DVec3.Packed+type DPoint4 = Point DVec4++instance (Floating a, VectorSpace v a) => AffineSpace (Point v) v a where origin = Point zeroVector {-# INLINE (.+^) #-}@@ -97,13 +130,13 @@ Point a .-. Point b = a ^-^ b {-# INLINE qd #-}-qd :: VectorSpace v Float => Point v -> Point v -> Float+qd :: (Floating a, VectorSpace v a) => Point v -> Point v -> a qd a b = Vector.quadrance (a AffineSpace..-. b) {-# INLINE distance #-}-distance :: VectorSpace v Float => Point v -> Point v -> Float+distance :: (Floating a, VectorSpace v a) => Point v -> Point v -> a distance a b = sqrt (qd a b) {-# INLINE lerp #-}-lerp :: VectorSpace v Float => Point v -> Point v -> Float -> Point v+lerp :: (Num a, VectorSpace v a) => Point v -> Point v -> a -> Point v lerp (Point a) (Point b) = Point . Vector.lerp a b
src/Geomancy/Quaternion.hs view
@@ -301,10 +301,20 @@ -} {-# INLINE rotate #-} rotate :: Quaternion -> Vec3 -> Vec3-rotate q v = withQuaternion q' \_a b c d -> vec3 b c d- where- q' = withVec3 v \x y z ->- q * quaternion 0 x y z * conjugate q+rotate (Quaternion w x y z) v =+ withVec3 v \vx vy vz ->+ let+ x2 = x + x+ y2 = y + y+ z2 = z + z+ tx = y2 * vz - z2 * vy+ ty = z2 * vx - x2 * vz+ tz = x2 * vy - y2 * vx+ in+ vec3+ (vx + w * tx + y * tz - z * ty)+ (vy + w * ty + z * tx - x * tz)+ (vz + w * tz + x * ty - y * tx) {- | Rotate point around another point with a unit quaternion. -}
src/Geomancy/Swizzle.hs view
@@ -1,1513 +1,83 @@-{-# LANGUAGE BlockArguments #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE RankNTypes #-}--module Geomancy.Swizzle- ( swizzle- , (.@)- ) where--import GHC.OverloadedLabels--import Geomancy.Vec2 (Vec2, vec2, withVec2)-import Geomancy.Vec3 (Vec3, vec3, withVec3)-import Geomancy.Vec4 (Vec4, vec4, withVec4)--newtype Swizzle to fro = Swizzle { swizzle :: fro -> to }--{-# INLINE (.@) #-}-(.@) :: forall to fro . fro -> Swizzle to fro -> to-v .@ Swizzle f = f v---- * From Vec2---- ** To Float--instance IsLabel "x" (Swizzle Float Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x _ -> x--instance IsLabel "y" (Swizzle Float Vec2) where- fromLabel = Swizzle \v -> withVec2 v \_ y -> y---- ** To Vec2--instance IsLabel "xx" (Swizzle Vec2 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x _ -> vec2 x x--instance IsLabel "yx" (Swizzle Vec2 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec2 y x--instance IsLabel "yy" (Swizzle Vec2 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \_ y -> vec2 y y---- ** To Vec3--instance IsLabel "xxx" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x _ -> vec3 x x x--instance IsLabel "xxy" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec3 x x y--instance IsLabel "xyx" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec3 x y x--instance IsLabel "xyy" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec3 x y y--instance IsLabel "yxx" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec3 y x x--instance IsLabel "yxy" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec3 y x y--instance IsLabel "yyx" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec3 y y x--instance IsLabel "yyy" (Swizzle Vec3 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \_ y -> vec3 y y y---- ** To Vec4--instance IsLabel "xxxx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x _ -> vec4 x x x x--instance IsLabel "xxxy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x x x y--instance IsLabel "xxyx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x x y x--instance IsLabel "xxyy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x x y y--instance IsLabel "xyxx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x y x x--instance IsLabel "xyxy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x y x y--instance IsLabel "xyyx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x y y x--instance IsLabel "xyyy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 x y y y--instance IsLabel "yxxx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y x x x--instance IsLabel "yxxy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y x x y--instance IsLabel "yxyx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y x y x--instance IsLabel "yxyy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y x y y--instance IsLabel "yyxx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y y x x--instance IsLabel "yyxy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y y x y--instance IsLabel "yyyx" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \x y -> vec4 y y y x--instance IsLabel "yyyy" (Swizzle Vec4 Vec2) where- fromLabel = Swizzle \v -> withVec2 v \_ y -> vec4 y y y y---- * From Vec3---- * To Float--instance IsLabel "x" (Swizzle Float Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ _ -> x--instance IsLabel "y" (Swizzle Float Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y _ -> y--instance IsLabel "z" (Swizzle Float Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ _ z -> z---- * To Vec2--instance IsLabel "xx" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ _ -> vec2 x x--instance IsLabel "xy" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec2 x y--instance IsLabel "xz" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec2 x z--instance IsLabel "yx" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec2 y x--instance IsLabel "yy" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y _ -> vec2 y y--instance IsLabel "yz" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec2 y z--instance IsLabel "zx" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec2 z x--instance IsLabel "zy" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec2 z y--instance IsLabel "zz" (Swizzle Vec2 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ _ z -> vec2 z z---- * To Vec3--instance IsLabel "xxx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ _ -> vec3 x x x--instance IsLabel "xxy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec3 x x y--instance IsLabel "xxz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec3 x x z--instance IsLabel "xyx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec3 x y x--instance IsLabel "xyy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec3 x y y--instance IsLabel "xzx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec3 x z x--instance IsLabel "xzy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec3 x z y--instance IsLabel "xzz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec3 x z z--instance IsLabel "yxx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec3 y x x--instance IsLabel "yxy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec3 y x y--instance IsLabel "yxz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec3 y x z--instance IsLabel "yyx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec3 y y x--instance IsLabel "yyy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y _ -> vec3 y y y--instance IsLabel "yyz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec3 y y z--instance IsLabel "yzx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec3 y z x--instance IsLabel "yzy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec3 y z y--instance IsLabel "yzz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec3 y z z--instance IsLabel "zxx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec3 z x x--instance IsLabel "zxy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec3 z x y--instance IsLabel "zxz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec3 z x z--instance IsLabel "zyx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec3 z y x--instance IsLabel "zyy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec3 z y y--instance IsLabel "zyz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec3 z y z--instance IsLabel "zzx" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec3 z z x--instance IsLabel "zzy" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec3 z z y--instance IsLabel "zzz" (Swizzle Vec3 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ _ z -> vec3 z z z---- * To Vec4--instance IsLabel "xxxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ _ -> vec4 x x x x--instance IsLabel "xxxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x x x y--instance IsLabel "xxxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x x x z--instance IsLabel "xxyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x x y x--instance IsLabel "xxyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x x y y--instance IsLabel "xxyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x x y z--instance IsLabel "xxzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x x z x--instance IsLabel "xxzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x x z y--instance IsLabel "xxzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x x z z--instance IsLabel "xyxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x y x x--instance IsLabel "xyxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x y x y--instance IsLabel "xyxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x y x z--instance IsLabel "xyyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x y y x--instance IsLabel "xyyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 x y y y--instance IsLabel "xyyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x y y z--instance IsLabel "xyzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x y z x--instance IsLabel "xyzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x y z y--instance IsLabel "xyzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x y z z--instance IsLabel "xzxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x z x x--instance IsLabel "xzxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x z x y--instance IsLabel "xzxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x z x z--instance IsLabel "xzyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x z y x--instance IsLabel "xzyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x z y y--instance IsLabel "xzyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x z y z--instance IsLabel "xzzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x z z x--instance IsLabel "xzzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 x z z y--instance IsLabel "xzzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 x z z z--instance IsLabel "yxxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y x x x--instance IsLabel "yxxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y x x y--instance IsLabel "yxxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y x x z--instance IsLabel "yxyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y x y x--instance IsLabel "yxyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y x y y--instance IsLabel "yxyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y x y z--instance IsLabel "yxzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y x z x--instance IsLabel "yxzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y x z y--instance IsLabel "yxzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y x z z--instance IsLabel "yyxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y y x x--instance IsLabel "yyxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y y x y--instance IsLabel "yyxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y y x z--instance IsLabel "yyyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y _ -> vec4 y y y x--instance IsLabel "yyyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y _ -> vec4 y y y y--instance IsLabel "yyyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y y y z--instance IsLabel "yyzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y y z x--instance IsLabel "yyzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y y z y--instance IsLabel "yyzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y y z z--instance IsLabel "yzxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y z x x--instance IsLabel "yzxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y z x y--instance IsLabel "yzxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y z x z--instance IsLabel "yzyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y z y x--instance IsLabel "yzyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y z y y--instance IsLabel "yzyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y z y z--instance IsLabel "yzzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 y z z x--instance IsLabel "yzzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y z z y--instance IsLabel "yzzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 y z z z--instance IsLabel "zxxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z x x x--instance IsLabel "zxxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z x x y--instance IsLabel "zxxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z x x z--instance IsLabel "zxyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z x y x--instance IsLabel "zxyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z x y y--instance IsLabel "zxyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z x y z--instance IsLabel "zxzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z x z x--instance IsLabel "zxzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z x z y--instance IsLabel "zxzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z x z z--instance IsLabel "zyxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z y x x--instance IsLabel "zyxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z y x y--instance IsLabel "zyxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z y x z--instance IsLabel "zyyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z y y x--instance IsLabel "zyyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z y y y--instance IsLabel "zyyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z y y z--instance IsLabel "zyzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z y z x--instance IsLabel "zyzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z y z y--instance IsLabel "zyzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z y z z--instance IsLabel "zzxx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z z x x--instance IsLabel "zzxy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z z x y--instance IsLabel "zzxz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z z x z--instance IsLabel "zzyx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x y z -> vec4 z z y x--instance IsLabel "zzyy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z z y y--instance IsLabel "zzyz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z z y z--instance IsLabel "zzzx" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \x _ z -> vec4 z z z x--instance IsLabel "zzzy" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ y z -> vec4 z z z y--instance IsLabel "zzzz" (Swizzle Vec4 Vec3) where- fromLabel = Swizzle \v -> withVec3 v \_ _ z -> vec4 z z z z---- * From Vec4---- ** To Float--instance IsLabel "x" (Swizzle Float Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ _ -> x--instance IsLabel "y" (Swizzle Float Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ _ -> y--instance IsLabel "z" (Swizzle Float Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z _ -> z--instance IsLabel "w" (Swizzle Float Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ _ w -> w---- ** To Vec2--instance IsLabel "xx" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ _ -> vec2 x x--instance IsLabel "xy" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec2 x y--instance IsLabel "xz" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec2 x z--instance IsLabel "xw" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec2 x w--instance IsLabel "yx" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec2 y x--instance IsLabel "yy" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ _ -> vec2 y y--instance IsLabel "yz" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec2 y z--instance IsLabel "yw" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec2 y w--instance IsLabel "zx" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec2 z x--instance IsLabel "zy" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec2 z y--instance IsLabel "zz" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z _ -> vec2 z z--instance IsLabel "zw" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec2 z w--instance IsLabel "wx" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec2 w x--instance IsLabel "wy" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec2 w y--instance IsLabel "wz" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec2 w z--instance IsLabel "ww" (Swizzle Vec2 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ _ w -> vec2 w w---- ** To Vec3--instance IsLabel "xxx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ _ -> vec3 x x x--instance IsLabel "xxy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec3 x x y--instance IsLabel "xxz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec3 x x z--instance IsLabel "xxw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec3 x x w--instance IsLabel "xyx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec3 x y x--instance IsLabel "xyy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec3 x y y--instance IsLabel "xyz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec3 x y z--instance IsLabel "xyw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec3 x y w--instance IsLabel "xzx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec3 x z x--instance IsLabel "xzy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec3 x z y--instance IsLabel "xzz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec3 x z z--instance IsLabel "xzw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec3 x z w--instance IsLabel "xwx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec3 x w x--instance IsLabel "xwy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec3 x w y--instance IsLabel "xwz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec3 x w z--instance IsLabel "xww" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec3 x w w--instance IsLabel "yxx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec3 y x x--instance IsLabel "yxy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec3 y x y--instance IsLabel "yxz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec3 y x z--instance IsLabel "yxw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec3 y x w--instance IsLabel "yyx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec3 y y x--instance IsLabel "yyy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ _ -> vec3 y y y--instance IsLabel "yyz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec3 y y z--instance IsLabel "yyw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec3 y y w--instance IsLabel "yzx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec3 y z x--instance IsLabel "yzy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec3 y z y--instance IsLabel "yzz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec3 y z z--instance IsLabel "yzw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec3 y z w--instance IsLabel "ywx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec3 y w x--instance IsLabel "ywy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec3 y w y--instance IsLabel "ywz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec3 y w z--instance IsLabel "yww" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec3 y w w--instance IsLabel "zxx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec3 z x x--instance IsLabel "zxy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec3 z x y--instance IsLabel "zxz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec3 z x z--instance IsLabel "zxw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec3 z x w--instance IsLabel "zyx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec3 z y x--instance IsLabel "zyy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec3 z y y--instance IsLabel "zyz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec3 z y z--instance IsLabel "zyw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec3 z y w--instance IsLabel "zzx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec3 z z x--instance IsLabel "zzy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec3 z z y--instance IsLabel "zzz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z _ -> vec3 z z z--instance IsLabel "zzw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec3 z z w--instance IsLabel "zwx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec3 z w x--instance IsLabel "zwy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec3 z w y--instance IsLabel "zwz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec3 z w z--instance IsLabel "zww" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec3 z w w--instance IsLabel "wxx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec3 w x x--instance IsLabel "wxy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec3 w x y--instance IsLabel "wxz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec3 w x z--instance IsLabel "wxw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec3 w x w--instance IsLabel "wyx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec3 w y x--instance IsLabel "wyy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec3 w y y--instance IsLabel "wyz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec3 w y z--instance IsLabel "wyw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec3 w y w--instance IsLabel "wzx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec3 w z x--instance IsLabel "wzy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec3 w z y--instance IsLabel "wzz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec3 w z z--instance IsLabel "wzw" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec3 w z w--instance IsLabel "wwx" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec3 w w x--instance IsLabel "wwy" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec3 w w y--instance IsLabel "wwz" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec3 w w z--instance IsLabel "www" (Swizzle Vec3 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ _ w -> vec3 w w w---- ** To Vec4--instance IsLabel "xxxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ _ -> vec4 x x x x--instance IsLabel "xxxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x x x y--instance IsLabel "xxxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x x x z--instance IsLabel "xxxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x x x w--instance IsLabel "xxyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x x y x--instance IsLabel "xxyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x x y y--instance IsLabel "xxyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x x y z--instance IsLabel "xxyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x x y w--instance IsLabel "xxzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x x z x--instance IsLabel "xxzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x x z y--instance IsLabel "xxzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x x z z--instance IsLabel "xxzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x x z w--instance IsLabel "xxwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x x w x--instance IsLabel "xxwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x x w y--instance IsLabel "xxwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x x w z--instance IsLabel "xxww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x x w w--instance IsLabel "xyxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x y x x--instance IsLabel "xyxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x y x y--instance IsLabel "xyxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x y x z--instance IsLabel "xyxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x y x w--instance IsLabel "xyyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x y y x--instance IsLabel "xyyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 x y y y--instance IsLabel "xyyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x y y z--instance IsLabel "xyyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x y y w--instance IsLabel "xyzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x y z x--instance IsLabel "xyzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x y z y--instance IsLabel "xyzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x y z z--instance IsLabel "xywx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x y w x--instance IsLabel "xywy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x y w y--instance IsLabel "xywz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 x y w z--instance IsLabel "xyww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x y w w--instance IsLabel "xzxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x z x x--instance IsLabel "xzxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x z x y--instance IsLabel "xzxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x z x z--instance IsLabel "xzxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x z x w--instance IsLabel "xzyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x z y x--instance IsLabel "xzyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x z y y--instance IsLabel "xzyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x z y z--instance IsLabel "xzyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 x z y w--instance IsLabel "xzzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x z z x--instance IsLabel "xzzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 x z z y--instance IsLabel "xzzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 x z z z--instance IsLabel "xzzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x z z w--instance IsLabel "xzwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x z w x--instance IsLabel "xzwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 x z w y--instance IsLabel "xzwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x z w z--instance IsLabel "xzww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x z w w--instance IsLabel "xwxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x w x x--instance IsLabel "xwxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x w x y--instance IsLabel "xwxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x w x z--instance IsLabel "xwxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x w x w--instance IsLabel "xwyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x w y x--instance IsLabel "xwyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x w y y--instance IsLabel "xwyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 x w y z--instance IsLabel "xwyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x w y w--instance IsLabel "xwzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x w z x--instance IsLabel "xwzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 x w z y--instance IsLabel "xwzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x w z z--instance IsLabel "xwzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x w z w--instance IsLabel "xwwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x w w x--instance IsLabel "xwwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 x w w y--instance IsLabel "xwwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 x w w z--instance IsLabel "xwww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 x w w w--instance IsLabel "yxxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y x x x--instance IsLabel "yxxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y x x y--instance IsLabel "yxxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y x x z--instance IsLabel "yxxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y x x w--instance IsLabel "yxyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y x y x--instance IsLabel "yxyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y x y y--instance IsLabel "yxyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y x y z--instance IsLabel "yxyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y x y w--instance IsLabel "yxzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y x z x--instance IsLabel "yxzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y x z y--instance IsLabel "yxzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y x z z--instance IsLabel "yxzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 y x z w--instance IsLabel "yxwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y x w x--instance IsLabel "yxwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y x w y--instance IsLabel "yxwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 y x w z--instance IsLabel "yxww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y x w w--instance IsLabel "yyxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y y x x--instance IsLabel "yyxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y y x y--instance IsLabel "yyxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y y x z--instance IsLabel "yyxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y y x w--instance IsLabel "yyyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ _ -> vec4 y y y x--instance IsLabel "yyyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ _ -> vec4 y y y y--instance IsLabel "yyyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y y y z--instance IsLabel "yyyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y y y w--instance IsLabel "yyzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y y z x--instance IsLabel "yyzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y y z y--instance IsLabel "yyzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y y z z--instance IsLabel "yyzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y y z w--instance IsLabel "yywx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y y w x--instance IsLabel "yywy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y y w y--instance IsLabel "yywz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y y w z--instance IsLabel "yyww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y y w w--instance IsLabel "yzxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y z x x--instance IsLabel "yzxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y z x y--instance IsLabel "yzxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y z x z--instance IsLabel "yzxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 y z x w--instance IsLabel "yzyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y z y x--instance IsLabel "yzyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y z y y--instance IsLabel "yzyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y z y z--instance IsLabel "yzyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y z y w--instance IsLabel "yzzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 y z z x--instance IsLabel "yzzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y z z y--instance IsLabel "yzzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 y z z z--instance IsLabel "yzzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y z z w--instance IsLabel "yzwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 y z w x--instance IsLabel "yzwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y z w y--instance IsLabel "yzwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y z w z--instance IsLabel "yzww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y z w w--instance IsLabel "ywxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y w x x--instance IsLabel "ywxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y w x y--instance IsLabel "ywxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 y w x z--instance IsLabel "ywxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y w x w--instance IsLabel "ywyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y w y x--instance IsLabel "ywyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y w y y--instance IsLabel "ywyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y w y z--instance IsLabel "ywyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y w y w--instance IsLabel "ywzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 y w z x--instance IsLabel "ywzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y w z y--instance IsLabel "ywzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y w z z--instance IsLabel "ywzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y w z w--instance IsLabel "ywwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 y w w x--instance IsLabel "ywwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y w w y--instance IsLabel "ywwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 y w w z--instance IsLabel "ywww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 y w w w--instance IsLabel "zxxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z x x x--instance IsLabel "zxxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z x x y--instance IsLabel "zxxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z x x z--instance IsLabel "zxxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z x x w--instance IsLabel "zxyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z x y x--instance IsLabel "zxyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z x y y--instance IsLabel "zxyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z x y z--instance IsLabel "zxyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 z x y w--instance IsLabel "zxzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z x z x--instance IsLabel "zxzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z x z y--instance IsLabel "zxzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z x z z--instance IsLabel "zxzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z x z w--instance IsLabel "zxwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z x w x--instance IsLabel "zxwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 z x w y--instance IsLabel "zxwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z x w z--instance IsLabel "zxww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z x w w--instance IsLabel "zyxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z y x x--instance IsLabel "zyxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z y x y--instance IsLabel "zyxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z y x z--instance IsLabel "zyxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 z y x w--instance IsLabel "zyyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z y y x--instance IsLabel "zyyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z y y y--instance IsLabel "zyyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z y y z--instance IsLabel "zyyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z y y w--instance IsLabel "zyzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z y z x--instance IsLabel "zyzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z y z y--instance IsLabel "zyzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z y z z--instance IsLabel "zyzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z y z w--instance IsLabel "zywx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 z y w x--instance IsLabel "zywy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z y w y--instance IsLabel "zywz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z y w z--instance IsLabel "zyww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z y w w--instance IsLabel "zzxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z z x x--instance IsLabel "zzxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z z x y--instance IsLabel "zzxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z z x z--instance IsLabel "zzxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z z x w--instance IsLabel "zzyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z _ -> vec4 z z y x--instance IsLabel "zzyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z z y y--instance IsLabel "zzyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z z y z--instance IsLabel "zzyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z z y w--instance IsLabel "zzzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z _ -> vec4 z z z x--instance IsLabel "zzzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z _ -> vec4 z z z y--instance IsLabel "zzzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z _ -> vec4 z z z z--instance IsLabel "zzzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z z z w--instance IsLabel "zzwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z z w x--instance IsLabel "zzwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z z w y--instance IsLabel "zzwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z z w z--instance IsLabel "zzww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z z w w--instance IsLabel "zwxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z w x x--instance IsLabel "zwxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 z w x y--instance IsLabel "zwxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z w x z--instance IsLabel "zwxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z w x w--instance IsLabel "zwyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 z w y x--instance IsLabel "zwyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z w y y--instance IsLabel "zwyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z w y z--instance IsLabel "zwyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z w y w--instance IsLabel "zwzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z w z x--instance IsLabel "zwzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z w z y--instance IsLabel "zwzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z w z z--instance IsLabel "zwzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z w z w--instance IsLabel "zwwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 z w w x--instance IsLabel "zwwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 z w w y--instance IsLabel "zwwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z w w z--instance IsLabel "zwww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 z w w w--instance IsLabel "wxxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w x x x--instance IsLabel "wxxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w x x y--instance IsLabel "wxxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w x x z--instance IsLabel "wxxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w x x w--instance IsLabel "wxyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w x y x--instance IsLabel "wxyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w x y y--instance IsLabel "wxyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 w x y z--instance IsLabel "wxyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w x y w--instance IsLabel "wxzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w x z x--instance IsLabel "wxzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 w x z y--instance IsLabel "wxzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w x z z--instance IsLabel "wxzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w x z w--instance IsLabel "wxwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w x w x--instance IsLabel "wxwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w x w y--instance IsLabel "wxwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w x w z--instance IsLabel "wxww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w x w w--instance IsLabel "wyxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w y x x--instance IsLabel "wyxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w y x y--instance IsLabel "wyxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 w y x z--instance IsLabel "wyxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w y x w--instance IsLabel "wyyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w y y x--instance IsLabel "wyyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w y y y--instance IsLabel "wyyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w y y z--instance IsLabel "wyyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w y y w--instance IsLabel "wyzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 w y z x--instance IsLabel "wyzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w y z y--instance IsLabel "wyzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w y z z--instance IsLabel "wyzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w y z w--instance IsLabel "wywx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w y w x--instance IsLabel "wywy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w y w y--instance IsLabel "wywz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w y w z--instance IsLabel "wyww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w y w w--instance IsLabel "wzxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w z x x--instance IsLabel "wzxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 w z x y--instance IsLabel "wzxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w z x z--instance IsLabel "wzxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w z x w--instance IsLabel "wzyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y z w -> vec4 w z y x--instance IsLabel "wzyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w z y y--instance IsLabel "wzyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w z y z--instance IsLabel "wzyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w z y w--instance IsLabel "wzzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w z z x--instance IsLabel "wzzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w z z y--instance IsLabel "wzzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w z z z--instance IsLabel "wzzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w z z w--instance IsLabel "wzwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w z w x--instance IsLabel "wzwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w z w y--instance IsLabel "wzwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w z w z--instance IsLabel "wzww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w z w w--instance IsLabel "wwxx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w w x x--instance IsLabel "wwxy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w w x y--instance IsLabel "wwxz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w w x z--instance IsLabel "wwxw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w w x w--instance IsLabel "wwyx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x y _ w -> vec4 w w y x--instance IsLabel "wwyy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w w y y--instance IsLabel "wwyz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w w y z--instance IsLabel "wwyw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w w y w--instance IsLabel "wwzx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ z w -> vec4 w w z x--instance IsLabel "wwzy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y z w -> vec4 w w z y--instance IsLabel "wwzz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w w z z--instance IsLabel "wwzw" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w w z w--instance IsLabel "wwwx" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \x _ _ w -> vec4 w w w x--instance IsLabel "wwwy" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ y _ w -> vec4 w w w y--instance IsLabel "wwwz" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ z w -> vec4 w w w z--instance IsLabel "wwww" (Swizzle Vec4 Vec4) where- fromLabel = Swizzle \v -> withVec4 v \_ _ _ w -> vec4 w w w w+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}++{- |+GLSL-style swizzles for every vector family.++Unlike the single-element fields, the swizzle instances are orphans.+Import this module to bring them all into scope:++> import Geomancy.Swizzle ()+>+> flip3 :: Vec3 -> Vec3+> flip3 v = v.zyx++Each family and kind of swizzle also has a module of its own,+@Geomancy.Swizzle.\<Family\>.\<Kind\>@, for when you need only some of them.+The families are @Vec@, @DVec@, @IVec@, @UVec@, @I64Vec@ and @U64Vec@, and the kinds are:++[@Shuffle@] keeps the size: @v.zyx@, @v.xxyy@, and the identity @v.xyz@.++[@Down@] narrows: @v.xy@ of a @Vec4@.++[@Up@] widens: @v.xyxy@ of a @Vec2@.++[@Extend@] widens with constant lanes, keeping the source in order: @v.xy0@, @v.xy01@, @v.xyz1@.++Swizzles chain, and the chains compile to plain lane reads:+@v.wzyx.zyx.yx.y@ is a single read of @v.y@.++While mask-swizzles aren't provided, you can chain an extend with a shuffle for this:++> white.xyz0.wyz -- (0, y, z)+> v.yzw.xyz0.wxyz -- (0, y, z, w) of a Vec4+> v.yz.xy01.zxyw -- (0, y, z, 1) of a Vec3++The same swizzles work as labels with '(.@)' and @OverloadedLabels@: @v .\@ #zyx@.+-}+module Geomancy.Swizzle+ ( swizzle+ , (.@)+ ) where++import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..))++import Geomancy.Swizzle.DVec.Down ()+import Geomancy.Swizzle.DVec.Extend ()+import Geomancy.Swizzle.DVec.Shuffle ()+import Geomancy.Swizzle.DVec.Up ()+import Geomancy.Swizzle.I64Vec.Down ()+import Geomancy.Swizzle.I64Vec.Extend ()+import Geomancy.Swizzle.I64Vec.Shuffle ()+import Geomancy.Swizzle.I64Vec.Up ()+import Geomancy.Swizzle.IVec.Down ()+import Geomancy.Swizzle.IVec.Extend ()+import Geomancy.Swizzle.IVec.Shuffle ()+import Geomancy.Swizzle.IVec.Up ()+import Geomancy.Swizzle.U64Vec.Down ()+import Geomancy.Swizzle.U64Vec.Extend ()+import Geomancy.Swizzle.U64Vec.Shuffle ()+import Geomancy.Swizzle.U64Vec.Up ()+import Geomancy.Swizzle.UVec.Down ()+import Geomancy.Swizzle.UVec.Extend ()+import Geomancy.Swizzle.UVec.Shuffle ()+import Geomancy.Swizzle.UVec.Up ()+import Geomancy.Swizzle.Vec.Down ()+import Geomancy.Swizzle.Vec.Extend ()+import Geomancy.Swizzle.Vec.Shuffle ()+import Geomancy.Swizzle.Vec.Up ()++newtype Swizzle to fro = Swizzle { swizzle :: fro -> to }++{-# INLINE (.@) #-}+(.@) :: forall to fro . fro -> Swizzle to fro -> to+v .@ Swizzle f = f v++instance HasField s fro to => IsLabel s (Swizzle to fro) where+ {-# INLINE fromLabel #-}+ fromLabel = Swizzle (getField @s)
+ src/Geomancy/Swizzle/DVec/Down.hs view
@@ -0,0 +1,369 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.DVec.Down () where++import GHC.Records (HasField(..))++import Geomancy.DVec2 (DVec2, dvec2)+import Geomancy.DVec3 (DVec3, dvec3, withDVec3)+import Geomancy.DVec4 (DVec4, withDVec4)++instance HasField "xx" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ _ -> dvec2 x x++instance HasField "xy" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec2 x y++instance HasField "xz" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec2 x z++instance HasField "yx" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec2 y x++instance HasField "yy" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y _ -> dvec2 y y++instance HasField "yz" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec2 y z++instance HasField "zx" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec2 z x++instance HasField "zy" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec2 z y++instance HasField "zz" DVec3 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ _ z -> dvec2 z z++instance HasField "xx" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ _ -> dvec2 x x++instance HasField "xy" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec2 x y++instance HasField "xz" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec2 x z++instance HasField "xw" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec2 x w++instance HasField "yx" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec2 y x++instance HasField "yy" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ _ -> dvec2 y y++instance HasField "yz" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec2 y z++instance HasField "yw" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec2 y w++instance HasField "zx" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec2 z x++instance HasField "zy" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec2 z y++instance HasField "zz" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z _ -> dvec2 z z++instance HasField "zw" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec2 z w++instance HasField "wx" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec2 w x++instance HasField "wy" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec2 w y++instance HasField "wz" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec2 w z++instance HasField "ww" DVec4 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ _ w -> dvec2 w w++instance HasField "xxx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ _ -> dvec3 x x x++instance HasField "xxy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec3 x x y++instance HasField "xxz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec3 x x z++instance HasField "xxw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec3 x x w++instance HasField "xyx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec3 x y x++instance HasField "xyy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec3 x y y++instance HasField "xyz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec3 x y z++instance HasField "xyw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec3 x y w++instance HasField "xzx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec3 x z x++instance HasField "xzy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec3 x z y++instance HasField "xzz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec3 x z z++instance HasField "xzw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec3 x z w++instance HasField "xwx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec3 x w x++instance HasField "xwy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec3 x w y++instance HasField "xwz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec3 x w z++instance HasField "xww" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec3 x w w++instance HasField "yxx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec3 y x x++instance HasField "yxy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec3 y x y++instance HasField "yxz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec3 y x z++instance HasField "yxw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec3 y x w++instance HasField "yyx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec3 y y x++instance HasField "yyy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ _ -> dvec3 y y y++instance HasField "yyz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec3 y y z++instance HasField "yyw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec3 y y w++instance HasField "yzx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec3 y z x++instance HasField "yzy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec3 y z y++instance HasField "yzz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec3 y z z++instance HasField "yzw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec3 y z w++instance HasField "ywx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec3 y w x++instance HasField "ywy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec3 y w y++instance HasField "ywz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec3 y w z++instance HasField "yww" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec3 y w w++instance HasField "zxx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec3 z x x++instance HasField "zxy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec3 z x y++instance HasField "zxz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec3 z x z++instance HasField "zxw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec3 z x w++instance HasField "zyx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec3 z y x++instance HasField "zyy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec3 z y y++instance HasField "zyz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec3 z y z++instance HasField "zyw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec3 z y w++instance HasField "zzx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec3 z z x++instance HasField "zzy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec3 z z y++instance HasField "zzz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z _ -> dvec3 z z z++instance HasField "zzw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec3 z z w++instance HasField "zwx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec3 z w x++instance HasField "zwy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec3 z w y++instance HasField "zwz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec3 z w z++instance HasField "zww" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec3 z w w++instance HasField "wxx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec3 w x x++instance HasField "wxy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec3 w x y++instance HasField "wxz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec3 w x z++instance HasField "wxw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec3 w x w++instance HasField "wyx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec3 w y x++instance HasField "wyy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec3 w y y++instance HasField "wyz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec3 w y z++instance HasField "wyw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec3 w y w++instance HasField "wzx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec3 w z x++instance HasField "wzy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec3 w z y++instance HasField "wzz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec3 w z z++instance HasField "wzw" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec3 w z w++instance HasField "wwx" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec3 w w x++instance HasField "wwy" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec3 w w y++instance HasField "wwz" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec3 w w z++instance HasField "www" DVec4 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ _ w -> dvec3 w w w
+ src/Geomancy/Swizzle/DVec/Extend.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.DVec.Extend () where++import GHC.Records (HasField(..))++import Geomancy.DVec2 (DVec2, withDVec2)+import Geomancy.DVec3 (DVec3, dvec3, withDVec3)+import Geomancy.DVec4 (DVec4, dvec4)++instance HasField "xy0" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 x y 0++instance HasField "xy1" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 x y 1++instance HasField "xy00" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y 0 0++instance HasField "xy01" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y 0 1++instance HasField "xy10" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y 1 0++instance HasField "xy11" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y 1 1++instance HasField "xyz0" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y z 0++instance HasField "xyz1" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y z 1
+ src/Geomancy/Swizzle/DVec/Shuffle.hs view
@@ -0,0 +1,1161 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.DVec.Shuffle () where++import GHC.Records (HasField(..))++import Geomancy.DVec2 (DVec2, dvec2, withDVec2)+import Geomancy.DVec3 (DVec3, dvec3, withDVec3)+import Geomancy.DVec4 (DVec4, dvec4, withDVec4)++instance HasField "xx" DVec2 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x _ -> dvec2 x x++instance HasField "xy" DVec2 DVec2 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "yx" DVec2 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec2 y x++instance HasField "yy" DVec2 DVec2 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \_ y -> dvec2 y y++instance HasField "xxx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ _ -> dvec3 x x x++instance HasField "xxy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec3 x x y++instance HasField "xxz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec3 x x z++instance HasField "xyx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec3 x y x++instance HasField "xyy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec3 x y y++instance HasField "xyz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xzx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec3 x z x++instance HasField "xzy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec3 x z y++instance HasField "xzz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec3 x z z++instance HasField "yxx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec3 y x x++instance HasField "yxy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec3 y x y++instance HasField "yxz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec3 y x z++instance HasField "yyx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec3 y y x++instance HasField "yyy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y _ -> dvec3 y y y++instance HasField "yyz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec3 y y z++instance HasField "yzx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec3 y z x++instance HasField "yzy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec3 y z y++instance HasField "yzz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec3 y z z++instance HasField "zxx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec3 z x x++instance HasField "zxy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec3 z x y++instance HasField "zxz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec3 z x z++instance HasField "zyx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec3 z y x++instance HasField "zyy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec3 z y y++instance HasField "zyz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec3 z y z++instance HasField "zzx" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec3 z z x++instance HasField "zzy" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec3 z z y++instance HasField "zzz" DVec3 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ _ z -> dvec3 z z z++instance HasField "xxxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ _ -> dvec4 x x x x++instance HasField "xxxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x x x y++instance HasField "xxxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x x x z++instance HasField "xxxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x x x w++instance HasField "xxyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x x y x++instance HasField "xxyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x x y y++instance HasField "xxyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x x y z++instance HasField "xxyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x x y w++instance HasField "xxzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x x z x++instance HasField "xxzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x x z y++instance HasField "xxzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x x z z++instance HasField "xxzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x x z w++instance HasField "xxwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x x w x++instance HasField "xxwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x x w y++instance HasField "xxwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x x w z++instance HasField "xxww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x x w w++instance HasField "xyxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x y x x++instance HasField "xyxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x y x y++instance HasField "xyxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x y x z++instance HasField "xyxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x y x w++instance HasField "xyyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x y y x++instance HasField "xyyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 x y y y++instance HasField "xyyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x y y z++instance HasField "xyyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x y y w++instance HasField "xyzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x y z x++instance HasField "xyzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x y z y++instance HasField "xyzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x y z z++instance HasField "xyzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xywx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x y w x++instance HasField "xywy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x y w y++instance HasField "xywz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 x y w z++instance HasField "xyww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x y w w++instance HasField "xzxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x z x x++instance HasField "xzxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x z x y++instance HasField "xzxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x z x z++instance HasField "xzxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x z x w++instance HasField "xzyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x z y x++instance HasField "xzyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x z y y++instance HasField "xzyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x z y z++instance HasField "xzyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 x z y w++instance HasField "xzzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x z z x++instance HasField "xzzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 x z z y++instance HasField "xzzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 x z z z++instance HasField "xzzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x z z w++instance HasField "xzwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x z w x++instance HasField "xzwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 x z w y++instance HasField "xzwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x z w z++instance HasField "xzww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x z w w++instance HasField "xwxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x w x x++instance HasField "xwxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x w x y++instance HasField "xwxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x w x z++instance HasField "xwxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x w x w++instance HasField "xwyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x w y x++instance HasField "xwyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x w y y++instance HasField "xwyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 x w y z++instance HasField "xwyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x w y w++instance HasField "xwzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x w z x++instance HasField "xwzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 x w z y++instance HasField "xwzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x w z z++instance HasField "xwzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x w z w++instance HasField "xwwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x w w x++instance HasField "xwwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 x w w y++instance HasField "xwwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 x w w z++instance HasField "xwww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 x w w w++instance HasField "yxxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y x x x++instance HasField "yxxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y x x y++instance HasField "yxxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y x x z++instance HasField "yxxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y x x w++instance HasField "yxyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y x y x++instance HasField "yxyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y x y y++instance HasField "yxyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y x y z++instance HasField "yxyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y x y w++instance HasField "yxzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y x z x++instance HasField "yxzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y x z y++instance HasField "yxzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y x z z++instance HasField "yxzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 y x z w++instance HasField "yxwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y x w x++instance HasField "yxwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y x w y++instance HasField "yxwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 y x w z++instance HasField "yxww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y x w w++instance HasField "yyxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y y x x++instance HasField "yyxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y y x y++instance HasField "yyxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y y x z++instance HasField "yyxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y y x w++instance HasField "yyyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ _ -> dvec4 y y y x++instance HasField "yyyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ _ -> dvec4 y y y y++instance HasField "yyyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y y y z++instance HasField "yyyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y y y w++instance HasField "yyzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y y z x++instance HasField "yyzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y y z y++instance HasField "yyzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y y z z++instance HasField "yyzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y y z w++instance HasField "yywx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y y w x++instance HasField "yywy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y y w y++instance HasField "yywz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y y w z++instance HasField "yyww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y y w w++instance HasField "yzxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y z x x++instance HasField "yzxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y z x y++instance HasField "yzxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y z x z++instance HasField "yzxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 y z x w++instance HasField "yzyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y z y x++instance HasField "yzyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y z y y++instance HasField "yzyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y z y z++instance HasField "yzyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y z y w++instance HasField "yzzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 y z z x++instance HasField "yzzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y z z y++instance HasField "yzzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 y z z z++instance HasField "yzzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y z z w++instance HasField "yzwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 y z w x++instance HasField "yzwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y z w y++instance HasField "yzwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y z w z++instance HasField "yzww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y z w w++instance HasField "ywxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y w x x++instance HasField "ywxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y w x y++instance HasField "ywxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 y w x z++instance HasField "ywxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y w x w++instance HasField "ywyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y w y x++instance HasField "ywyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y w y y++instance HasField "ywyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y w y z++instance HasField "ywyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y w y w++instance HasField "ywzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 y w z x++instance HasField "ywzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y w z y++instance HasField "ywzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y w z z++instance HasField "ywzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y w z w++instance HasField "ywwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 y w w x++instance HasField "ywwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y w w y++instance HasField "ywwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 y w w z++instance HasField "ywww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 y w w w++instance HasField "zxxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z x x x++instance HasField "zxxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z x x y++instance HasField "zxxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z x x z++instance HasField "zxxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z x x w++instance HasField "zxyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z x y x++instance HasField "zxyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z x y y++instance HasField "zxyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z x y z++instance HasField "zxyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 z x y w++instance HasField "zxzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z x z x++instance HasField "zxzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z x z y++instance HasField "zxzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z x z z++instance HasField "zxzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z x z w++instance HasField "zxwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z x w x++instance HasField "zxwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 z x w y++instance HasField "zxwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z x w z++instance HasField "zxww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z x w w++instance HasField "zyxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z y x x++instance HasField "zyxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z y x y++instance HasField "zyxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z y x z++instance HasField "zyxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 z y x w++instance HasField "zyyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z y y x++instance HasField "zyyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z y y y++instance HasField "zyyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z y y z++instance HasField "zyyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z y y w++instance HasField "zyzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z y z x++instance HasField "zyzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z y z y++instance HasField "zyzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z y z z++instance HasField "zyzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z y z w++instance HasField "zywx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 z y w x++instance HasField "zywy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z y w y++instance HasField "zywz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z y w z++instance HasField "zyww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z y w w++instance HasField "zzxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z z x x++instance HasField "zzxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z z x y++instance HasField "zzxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z z x z++instance HasField "zzxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z z x w++instance HasField "zzyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z _ -> dvec4 z z y x++instance HasField "zzyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z z y y++instance HasField "zzyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z z y z++instance HasField "zzyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z z y w++instance HasField "zzzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z _ -> dvec4 z z z x++instance HasField "zzzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z _ -> dvec4 z z z y++instance HasField "zzzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z _ -> dvec4 z z z z++instance HasField "zzzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z z z w++instance HasField "zzwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z z w x++instance HasField "zzwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z z w y++instance HasField "zzwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z z w z++instance HasField "zzww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z z w w++instance HasField "zwxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z w x x++instance HasField "zwxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 z w x y++instance HasField "zwxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z w x z++instance HasField "zwxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z w x w++instance HasField "zwyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 z w y x++instance HasField "zwyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z w y y++instance HasField "zwyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z w y z++instance HasField "zwyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z w y w++instance HasField "zwzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z w z x++instance HasField "zwzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z w z y++instance HasField "zwzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z w z z++instance HasField "zwzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z w z w++instance HasField "zwwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 z w w x++instance HasField "zwwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 z w w y++instance HasField "zwwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z w w z++instance HasField "zwww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 z w w w++instance HasField "wxxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w x x x++instance HasField "wxxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w x x y++instance HasField "wxxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w x x z++instance HasField "wxxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w x x w++instance HasField "wxyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w x y x++instance HasField "wxyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w x y y++instance HasField "wxyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 w x y z++instance HasField "wxyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w x y w++instance HasField "wxzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w x z x++instance HasField "wxzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 w x z y++instance HasField "wxzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w x z z++instance HasField "wxzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w x z w++instance HasField "wxwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w x w x++instance HasField "wxwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w x w y++instance HasField "wxwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w x w z++instance HasField "wxww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w x w w++instance HasField "wyxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w y x x++instance HasField "wyxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w y x y++instance HasField "wyxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 w y x z++instance HasField "wyxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w y x w++instance HasField "wyyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w y y x++instance HasField "wyyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w y y y++instance HasField "wyyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w y y z++instance HasField "wyyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w y y w++instance HasField "wyzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 w y z x++instance HasField "wyzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w y z y++instance HasField "wyzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w y z z++instance HasField "wyzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w y z w++instance HasField "wywx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w y w x++instance HasField "wywy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w y w y++instance HasField "wywz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w y w z++instance HasField "wyww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w y w w++instance HasField "wzxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w z x x++instance HasField "wzxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 w z x y++instance HasField "wzxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w z x z++instance HasField "wzxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w z x w++instance HasField "wzyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y z w -> dvec4 w z y x++instance HasField "wzyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w z y y++instance HasField "wzyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w z y z++instance HasField "wzyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w z y w++instance HasField "wzzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w z z x++instance HasField "wzzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w z z y++instance HasField "wzzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w z z z++instance HasField "wzzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w z z w++instance HasField "wzwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w z w x++instance HasField "wzwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w z w y++instance HasField "wzwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w z w z++instance HasField "wzww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w z w w++instance HasField "wwxx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w w x x++instance HasField "wwxy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w w x y++instance HasField "wwxz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w w x z++instance HasField "wwxw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w w x w++instance HasField "wwyx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x y _ w -> dvec4 w w y x++instance HasField "wwyy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w w y y++instance HasField "wwyz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w w y z++instance HasField "wwyw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w w y w++instance HasField "wwzx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ z w -> dvec4 w w z x++instance HasField "wwzy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y z w -> dvec4 w w z y++instance HasField "wwzz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w w z z++instance HasField "wwzw" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w w z w++instance HasField "wwwx" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \x _ _ w -> dvec4 w w w x++instance HasField "wwwy" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ y _ w -> dvec4 w w w y++instance HasField "wwwz" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ z w -> dvec4 w w w z++instance HasField "wwww" DVec4 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec4 v \_ _ _ w -> dvec4 w w w w
+ src/Geomancy/Swizzle/DVec/Up.hs view
@@ -0,0 +1,433 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.DVec.Up () where++import GHC.Records (HasField(..))++import Geomancy.DVec2 (DVec2, withDVec2)+import Geomancy.DVec3 (DVec3, dvec3, withDVec3)+import Geomancy.DVec4 (DVec4, dvec4)++instance HasField "xxx" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x _ -> dvec3 x x x++instance HasField "xxy" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 x x y++instance HasField "xyx" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 x y x++instance HasField "xyy" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 x y y++instance HasField "yxx" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 y x x++instance HasField "yxy" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 y x y++instance HasField "yyx" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec3 y y x++instance HasField "yyy" DVec2 DVec3 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \_ y -> dvec3 y y y++instance HasField "xxxx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x _ -> dvec4 x x x x++instance HasField "xxxy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x x x y++instance HasField "xxyx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x x y x++instance HasField "xxyy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x x y y++instance HasField "xyxx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y x x++instance HasField "xyxy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y x y++instance HasField "xyyx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y y x++instance HasField "xyyy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 x y y y++instance HasField "yxxx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y x x x++instance HasField "yxxy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y x x y++instance HasField "yxyx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y x y x++instance HasField "yxyy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y x y y++instance HasField "yyxx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y y x x++instance HasField "yyxy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y y x y++instance HasField "yyyx" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \x y -> dvec4 y y y x++instance HasField "yyyy" DVec2 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec2 v \_ y -> dvec4 y y y y++instance HasField "xxxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ _ -> dvec4 x x x x++instance HasField "xxxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x x x y++instance HasField "xxxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x x x z++instance HasField "xxyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x x y x++instance HasField "xxyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x x y y++instance HasField "xxyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x x y z++instance HasField "xxzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x x z x++instance HasField "xxzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x x z y++instance HasField "xxzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x x z z++instance HasField "xyxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x y x x++instance HasField "xyxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x y x y++instance HasField "xyxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y x z++instance HasField "xyyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x y y x++instance HasField "xyyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 x y y y++instance HasField "xyyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y y z++instance HasField "xyzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y z x++instance HasField "xyzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y z y++instance HasField "xyzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x y z z++instance HasField "xzxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x z x x++instance HasField "xzxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x z x y++instance HasField "xzxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x z x z++instance HasField "xzyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x z y x++instance HasField "xzyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x z y y++instance HasField "xzyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x z y z++instance HasField "xzzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x z z x++instance HasField "xzzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 x z z y++instance HasField "xzzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 x z z z++instance HasField "yxxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y x x x++instance HasField "yxxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y x x y++instance HasField "yxxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y x x z++instance HasField "yxyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y x y x++instance HasField "yxyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y x y y++instance HasField "yxyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y x y z++instance HasField "yxzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y x z x++instance HasField "yxzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y x z y++instance HasField "yxzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y x z z++instance HasField "yyxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y y x x++instance HasField "yyxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y y x y++instance HasField "yyxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y y x z++instance HasField "yyyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y _ -> dvec4 y y y x++instance HasField "yyyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y _ -> dvec4 y y y y++instance HasField "yyyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y y y z++instance HasField "yyzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y y z x++instance HasField "yyzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y y z y++instance HasField "yyzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y y z z++instance HasField "yzxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y z x x++instance HasField "yzxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y z x y++instance HasField "yzxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y z x z++instance HasField "yzyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y z y x++instance HasField "yzyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y z y y++instance HasField "yzyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y z y z++instance HasField "yzzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 y z z x++instance HasField "yzzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y z z y++instance HasField "yzzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 y z z z++instance HasField "zxxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z x x x++instance HasField "zxxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z x x y++instance HasField "zxxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z x x z++instance HasField "zxyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z x y x++instance HasField "zxyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z x y y++instance HasField "zxyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z x y z++instance HasField "zxzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z x z x++instance HasField "zxzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z x z y++instance HasField "zxzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z x z z++instance HasField "zyxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z y x x++instance HasField "zyxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z y x y++instance HasField "zyxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z y x z++instance HasField "zyyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z y y x++instance HasField "zyyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z y y y++instance HasField "zyyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z y y z++instance HasField "zyzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z y z x++instance HasField "zyzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z y z y++instance HasField "zyzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z y z z++instance HasField "zzxx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z z x x++instance HasField "zzxy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z z x y++instance HasField "zzxz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z z x z++instance HasField "zzyx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x y z -> dvec4 z z y x++instance HasField "zzyy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z z y y++instance HasField "zzyz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z z y z++instance HasField "zzzx" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \x _ z -> dvec4 z z z x++instance HasField "zzzy" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ y z -> dvec4 z z z y++instance HasField "zzzz" DVec3 DVec4 where+ {-# INLINE getField #-}+ getField v = withDVec3 v \_ _ z -> dvec4 z z z z
+ src/Geomancy/Swizzle/I64Vec/Down.hs view
@@ -0,0 +1,369 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.I64Vec.Down () where++import GHC.Records (HasField(..))++import Geomancy.I64Vec2 (I64Vec2, i64vec2)+import Geomancy.I64Vec3 (I64Vec3, i64vec3, withI64Vec3)+import Geomancy.I64Vec4 (I64Vec4, withI64Vec4)++instance HasField "xx" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ _ -> i64vec2 x x++instance HasField "xy" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec2 x y++instance HasField "xz" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec2 x z++instance HasField "yx" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec2 y x++instance HasField "yy" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y _ -> i64vec2 y y++instance HasField "yz" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec2 y z++instance HasField "zx" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec2 z x++instance HasField "zy" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec2 z y++instance HasField "zz" I64Vec3 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ _ z -> i64vec2 z z++instance HasField "xx" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ _ -> i64vec2 x x++instance HasField "xy" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec2 x y++instance HasField "xz" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec2 x z++instance HasField "xw" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec2 x w++instance HasField "yx" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec2 y x++instance HasField "yy" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ _ -> i64vec2 y y++instance HasField "yz" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec2 y z++instance HasField "yw" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec2 y w++instance HasField "zx" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec2 z x++instance HasField "zy" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec2 z y++instance HasField "zz" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z _ -> i64vec2 z z++instance HasField "zw" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec2 z w++instance HasField "wx" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec2 w x++instance HasField "wy" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec2 w y++instance HasField "wz" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec2 w z++instance HasField "ww" I64Vec4 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ _ w -> i64vec2 w w++instance HasField "xxx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ _ -> i64vec3 x x x++instance HasField "xxy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec3 x x y++instance HasField "xxz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec3 x x z++instance HasField "xxw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec3 x x w++instance HasField "xyx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec3 x y x++instance HasField "xyy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec3 x y y++instance HasField "xyz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec3 x y z++instance HasField "xyw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec3 x y w++instance HasField "xzx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec3 x z x++instance HasField "xzy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec3 x z y++instance HasField "xzz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec3 x z z++instance HasField "xzw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec3 x z w++instance HasField "xwx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec3 x w x++instance HasField "xwy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec3 x w y++instance HasField "xwz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec3 x w z++instance HasField "xww" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec3 x w w++instance HasField "yxx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec3 y x x++instance HasField "yxy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec3 y x y++instance HasField "yxz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec3 y x z++instance HasField "yxw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec3 y x w++instance HasField "yyx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec3 y y x++instance HasField "yyy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ _ -> i64vec3 y y y++instance HasField "yyz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec3 y y z++instance HasField "yyw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec3 y y w++instance HasField "yzx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec3 y z x++instance HasField "yzy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec3 y z y++instance HasField "yzz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec3 y z z++instance HasField "yzw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec3 y z w++instance HasField "ywx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec3 y w x++instance HasField "ywy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec3 y w y++instance HasField "ywz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec3 y w z++instance HasField "yww" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec3 y w w++instance HasField "zxx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec3 z x x++instance HasField "zxy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec3 z x y++instance HasField "zxz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec3 z x z++instance HasField "zxw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec3 z x w++instance HasField "zyx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec3 z y x++instance HasField "zyy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec3 z y y++instance HasField "zyz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec3 z y z++instance HasField "zyw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec3 z y w++instance HasField "zzx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec3 z z x++instance HasField "zzy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec3 z z y++instance HasField "zzz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z _ -> i64vec3 z z z++instance HasField "zzw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec3 z z w++instance HasField "zwx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec3 z w x++instance HasField "zwy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec3 z w y++instance HasField "zwz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec3 z w z++instance HasField "zww" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec3 z w w++instance HasField "wxx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec3 w x x++instance HasField "wxy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec3 w x y++instance HasField "wxz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec3 w x z++instance HasField "wxw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec3 w x w++instance HasField "wyx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec3 w y x++instance HasField "wyy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec3 w y y++instance HasField "wyz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec3 w y z++instance HasField "wyw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec3 w y w++instance HasField "wzx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec3 w z x++instance HasField "wzy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec3 w z y++instance HasField "wzz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec3 w z z++instance HasField "wzw" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec3 w z w++instance HasField "wwx" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec3 w w x++instance HasField "wwy" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec3 w w y++instance HasField "wwz" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec3 w w z++instance HasField "www" I64Vec4 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ _ w -> i64vec3 w w w
+ src/Geomancy/Swizzle/I64Vec/Extend.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.I64Vec.Extend () where++import GHC.Records (HasField(..))++import Geomancy.I64Vec2 (I64Vec2, withI64Vec2)+import Geomancy.I64Vec3 (I64Vec3, i64vec3, withI64Vec3)+import Geomancy.I64Vec4 (I64Vec4, i64vec4)++instance HasField "xy0" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 x y 0++instance HasField "xy1" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 x y 1++instance HasField "xy00" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y 0 0++instance HasField "xy01" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y 0 1++instance HasField "xy10" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y 1 0++instance HasField "xy11" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y 1 1++instance HasField "xyz0" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y z 0++instance HasField "xyz1" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y z 1
+ src/Geomancy/Swizzle/I64Vec/Shuffle.hs view
@@ -0,0 +1,1161 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.I64Vec.Shuffle () where++import GHC.Records (HasField(..))++import Geomancy.I64Vec2 (I64Vec2, i64vec2, withI64Vec2)+import Geomancy.I64Vec3 (I64Vec3, i64vec3, withI64Vec3)+import Geomancy.I64Vec4 (I64Vec4, i64vec4, withI64Vec4)++instance HasField "xx" I64Vec2 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x _ -> i64vec2 x x++instance HasField "xy" I64Vec2 I64Vec2 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "yx" I64Vec2 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec2 y x++instance HasField "yy" I64Vec2 I64Vec2 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \_ y -> i64vec2 y y++instance HasField "xxx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ _ -> i64vec3 x x x++instance HasField "xxy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec3 x x y++instance HasField "xxz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec3 x x z++instance HasField "xyx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec3 x y x++instance HasField "xyy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec3 x y y++instance HasField "xyz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xzx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec3 x z x++instance HasField "xzy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec3 x z y++instance HasField "xzz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec3 x z z++instance HasField "yxx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec3 y x x++instance HasField "yxy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec3 y x y++instance HasField "yxz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec3 y x z++instance HasField "yyx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec3 y y x++instance HasField "yyy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y _ -> i64vec3 y y y++instance HasField "yyz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec3 y y z++instance HasField "yzx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec3 y z x++instance HasField "yzy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec3 y z y++instance HasField "yzz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec3 y z z++instance HasField "zxx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec3 z x x++instance HasField "zxy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec3 z x y++instance HasField "zxz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec3 z x z++instance HasField "zyx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec3 z y x++instance HasField "zyy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec3 z y y++instance HasField "zyz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec3 z y z++instance HasField "zzx" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec3 z z x++instance HasField "zzy" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec3 z z y++instance HasField "zzz" I64Vec3 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ _ z -> i64vec3 z z z++instance HasField "xxxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ _ -> i64vec4 x x x x++instance HasField "xxxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x x x y++instance HasField "xxxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x x x z++instance HasField "xxxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x x x w++instance HasField "xxyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x x y x++instance HasField "xxyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x x y y++instance HasField "xxyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x x y z++instance HasField "xxyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x x y w++instance HasField "xxzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x x z x++instance HasField "xxzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x x z y++instance HasField "xxzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x x z z++instance HasField "xxzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x x z w++instance HasField "xxwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x x w x++instance HasField "xxwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x x w y++instance HasField "xxwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x x w z++instance HasField "xxww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x x w w++instance HasField "xyxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x y x x++instance HasField "xyxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x y x y++instance HasField "xyxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x y x z++instance HasField "xyxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x y x w++instance HasField "xyyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x y y x++instance HasField "xyyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 x y y y++instance HasField "xyyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x y y z++instance HasField "xyyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x y y w++instance HasField "xyzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x y z x++instance HasField "xyzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x y z y++instance HasField "xyzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x y z z++instance HasField "xyzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xywx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x y w x++instance HasField "xywy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x y w y++instance HasField "xywz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 x y w z++instance HasField "xyww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x y w w++instance HasField "xzxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x z x x++instance HasField "xzxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x z x y++instance HasField "xzxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x z x z++instance HasField "xzxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x z x w++instance HasField "xzyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x z y x++instance HasField "xzyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x z y y++instance HasField "xzyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x z y z++instance HasField "xzyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 x z y w++instance HasField "xzzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x z z x++instance HasField "xzzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 x z z y++instance HasField "xzzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 x z z z++instance HasField "xzzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x z z w++instance HasField "xzwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x z w x++instance HasField "xzwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 x z w y++instance HasField "xzwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x z w z++instance HasField "xzww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x z w w++instance HasField "xwxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x w x x++instance HasField "xwxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x w x y++instance HasField "xwxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x w x z++instance HasField "xwxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x w x w++instance HasField "xwyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x w y x++instance HasField "xwyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x w y y++instance HasField "xwyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 x w y z++instance HasField "xwyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x w y w++instance HasField "xwzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x w z x++instance HasField "xwzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 x w z y++instance HasField "xwzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x w z z++instance HasField "xwzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x w z w++instance HasField "xwwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x w w x++instance HasField "xwwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 x w w y++instance HasField "xwwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 x w w z++instance HasField "xwww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 x w w w++instance HasField "yxxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y x x x++instance HasField "yxxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y x x y++instance HasField "yxxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y x x z++instance HasField "yxxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y x x w++instance HasField "yxyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y x y x++instance HasField "yxyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y x y y++instance HasField "yxyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y x y z++instance HasField "yxyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y x y w++instance HasField "yxzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y x z x++instance HasField "yxzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y x z y++instance HasField "yxzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y x z z++instance HasField "yxzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 y x z w++instance HasField "yxwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y x w x++instance HasField "yxwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y x w y++instance HasField "yxwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 y x w z++instance HasField "yxww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y x w w++instance HasField "yyxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y y x x++instance HasField "yyxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y y x y++instance HasField "yyxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y y x z++instance HasField "yyxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y y x w++instance HasField "yyyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ _ -> i64vec4 y y y x++instance HasField "yyyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ _ -> i64vec4 y y y y++instance HasField "yyyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y y y z++instance HasField "yyyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y y y w++instance HasField "yyzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y y z x++instance HasField "yyzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y y z y++instance HasField "yyzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y y z z++instance HasField "yyzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y y z w++instance HasField "yywx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y y w x++instance HasField "yywy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y y w y++instance HasField "yywz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y y w z++instance HasField "yyww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y y w w++instance HasField "yzxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y z x x++instance HasField "yzxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y z x y++instance HasField "yzxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y z x z++instance HasField "yzxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 y z x w++instance HasField "yzyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y z y x++instance HasField "yzyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y z y y++instance HasField "yzyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y z y z++instance HasField "yzyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y z y w++instance HasField "yzzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 y z z x++instance HasField "yzzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y z z y++instance HasField "yzzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 y z z z++instance HasField "yzzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y z z w++instance HasField "yzwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 y z w x++instance HasField "yzwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y z w y++instance HasField "yzwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y z w z++instance HasField "yzww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y z w w++instance HasField "ywxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y w x x++instance HasField "ywxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y w x y++instance HasField "ywxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 y w x z++instance HasField "ywxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y w x w++instance HasField "ywyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y w y x++instance HasField "ywyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y w y y++instance HasField "ywyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y w y z++instance HasField "ywyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y w y w++instance HasField "ywzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 y w z x++instance HasField "ywzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y w z y++instance HasField "ywzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y w z z++instance HasField "ywzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y w z w++instance HasField "ywwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 y w w x++instance HasField "ywwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y w w y++instance HasField "ywwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 y w w z++instance HasField "ywww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 y w w w++instance HasField "zxxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z x x x++instance HasField "zxxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z x x y++instance HasField "zxxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z x x z++instance HasField "zxxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z x x w++instance HasField "zxyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z x y x++instance HasField "zxyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z x y y++instance HasField "zxyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z x y z++instance HasField "zxyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 z x y w++instance HasField "zxzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z x z x++instance HasField "zxzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z x z y++instance HasField "zxzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z x z z++instance HasField "zxzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z x z w++instance HasField "zxwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z x w x++instance HasField "zxwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 z x w y++instance HasField "zxwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z x w z++instance HasField "zxww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z x w w++instance HasField "zyxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z y x x++instance HasField "zyxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z y x y++instance HasField "zyxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z y x z++instance HasField "zyxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 z y x w++instance HasField "zyyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z y y x++instance HasField "zyyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z y y y++instance HasField "zyyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z y y z++instance HasField "zyyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z y y w++instance HasField "zyzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z y z x++instance HasField "zyzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z y z y++instance HasField "zyzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z y z z++instance HasField "zyzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z y z w++instance HasField "zywx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 z y w x++instance HasField "zywy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z y w y++instance HasField "zywz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z y w z++instance HasField "zyww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z y w w++instance HasField "zzxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z z x x++instance HasField "zzxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z z x y++instance HasField "zzxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z z x z++instance HasField "zzxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z z x w++instance HasField "zzyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z _ -> i64vec4 z z y x++instance HasField "zzyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z z y y++instance HasField "zzyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z z y z++instance HasField "zzyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z z y w++instance HasField "zzzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z _ -> i64vec4 z z z x++instance HasField "zzzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z _ -> i64vec4 z z z y++instance HasField "zzzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z _ -> i64vec4 z z z z++instance HasField "zzzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z z z w++instance HasField "zzwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z z w x++instance HasField "zzwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z z w y++instance HasField "zzwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z z w z++instance HasField "zzww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z z w w++instance HasField "zwxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z w x x++instance HasField "zwxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 z w x y++instance HasField "zwxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z w x z++instance HasField "zwxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z w x w++instance HasField "zwyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 z w y x++instance HasField "zwyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z w y y++instance HasField "zwyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z w y z++instance HasField "zwyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z w y w++instance HasField "zwzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z w z x++instance HasField "zwzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z w z y++instance HasField "zwzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z w z z++instance HasField "zwzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z w z w++instance HasField "zwwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 z w w x++instance HasField "zwwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 z w w y++instance HasField "zwwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z w w z++instance HasField "zwww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 z w w w++instance HasField "wxxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w x x x++instance HasField "wxxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w x x y++instance HasField "wxxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w x x z++instance HasField "wxxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w x x w++instance HasField "wxyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w x y x++instance HasField "wxyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w x y y++instance HasField "wxyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 w x y z++instance HasField "wxyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w x y w++instance HasField "wxzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w x z x++instance HasField "wxzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 w x z y++instance HasField "wxzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w x z z++instance HasField "wxzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w x z w++instance HasField "wxwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w x w x++instance HasField "wxwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w x w y++instance HasField "wxwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w x w z++instance HasField "wxww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w x w w++instance HasField "wyxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w y x x++instance HasField "wyxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w y x y++instance HasField "wyxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 w y x z++instance HasField "wyxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w y x w++instance HasField "wyyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w y y x++instance HasField "wyyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w y y y++instance HasField "wyyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w y y z++instance HasField "wyyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w y y w++instance HasField "wyzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 w y z x++instance HasField "wyzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w y z y++instance HasField "wyzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w y z z++instance HasField "wyzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w y z w++instance HasField "wywx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w y w x++instance HasField "wywy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w y w y++instance HasField "wywz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w y w z++instance HasField "wyww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w y w w++instance HasField "wzxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w z x x++instance HasField "wzxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 w z x y++instance HasField "wzxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w z x z++instance HasField "wzxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w z x w++instance HasField "wzyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y z w -> i64vec4 w z y x++instance HasField "wzyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w z y y++instance HasField "wzyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w z y z++instance HasField "wzyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w z y w++instance HasField "wzzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w z z x++instance HasField "wzzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w z z y++instance HasField "wzzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w z z z++instance HasField "wzzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w z z w++instance HasField "wzwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w z w x++instance HasField "wzwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w z w y++instance HasField "wzwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w z w z++instance HasField "wzww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w z w w++instance HasField "wwxx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w w x x++instance HasField "wwxy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w w x y++instance HasField "wwxz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w w x z++instance HasField "wwxw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w w x w++instance HasField "wwyx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x y _ w -> i64vec4 w w y x++instance HasField "wwyy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w w y y++instance HasField "wwyz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w w y z++instance HasField "wwyw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w w y w++instance HasField "wwzx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ z w -> i64vec4 w w z x++instance HasField "wwzy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y z w -> i64vec4 w w z y++instance HasField "wwzz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w w z z++instance HasField "wwzw" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w w z w++instance HasField "wwwx" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \x _ _ w -> i64vec4 w w w x++instance HasField "wwwy" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ y _ w -> i64vec4 w w w y++instance HasField "wwwz" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ z w -> i64vec4 w w w z++instance HasField "wwww" I64Vec4 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec4 v \_ _ _ w -> i64vec4 w w w w
+ src/Geomancy/Swizzle/I64Vec/Up.hs view
@@ -0,0 +1,433 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.I64Vec.Up () where++import GHC.Records (HasField(..))++import Geomancy.I64Vec2 (I64Vec2, withI64Vec2)+import Geomancy.I64Vec3 (I64Vec3, i64vec3, withI64Vec3)+import Geomancy.I64Vec4 (I64Vec4, i64vec4)++instance HasField "xxx" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x _ -> i64vec3 x x x++instance HasField "xxy" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 x x y++instance HasField "xyx" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 x y x++instance HasField "xyy" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 x y y++instance HasField "yxx" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 y x x++instance HasField "yxy" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 y x y++instance HasField "yyx" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec3 y y x++instance HasField "yyy" I64Vec2 I64Vec3 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \_ y -> i64vec3 y y y++instance HasField "xxxx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x _ -> i64vec4 x x x x++instance HasField "xxxy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x x x y++instance HasField "xxyx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x x y x++instance HasField "xxyy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x x y y++instance HasField "xyxx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y x x++instance HasField "xyxy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y x y++instance HasField "xyyx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y y x++instance HasField "xyyy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 x y y y++instance HasField "yxxx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y x x x++instance HasField "yxxy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y x x y++instance HasField "yxyx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y x y x++instance HasField "yxyy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y x y y++instance HasField "yyxx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y y x x++instance HasField "yyxy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y y x y++instance HasField "yyyx" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \x y -> i64vec4 y y y x++instance HasField "yyyy" I64Vec2 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec2 v \_ y -> i64vec4 y y y y++instance HasField "xxxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ _ -> i64vec4 x x x x++instance HasField "xxxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x x x y++instance HasField "xxxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x x x z++instance HasField "xxyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x x y x++instance HasField "xxyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x x y y++instance HasField "xxyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x x y z++instance HasField "xxzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x x z x++instance HasField "xxzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x x z y++instance HasField "xxzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x x z z++instance HasField "xyxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x y x x++instance HasField "xyxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x y x y++instance HasField "xyxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y x z++instance HasField "xyyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x y y x++instance HasField "xyyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 x y y y++instance HasField "xyyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y y z++instance HasField "xyzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y z x++instance HasField "xyzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y z y++instance HasField "xyzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x y z z++instance HasField "xzxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x z x x++instance HasField "xzxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x z x y++instance HasField "xzxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x z x z++instance HasField "xzyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x z y x++instance HasField "xzyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x z y y++instance HasField "xzyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x z y z++instance HasField "xzzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x z z x++instance HasField "xzzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 x z z y++instance HasField "xzzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 x z z z++instance HasField "yxxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y x x x++instance HasField "yxxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y x x y++instance HasField "yxxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y x x z++instance HasField "yxyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y x y x++instance HasField "yxyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y x y y++instance HasField "yxyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y x y z++instance HasField "yxzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y x z x++instance HasField "yxzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y x z y++instance HasField "yxzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y x z z++instance HasField "yyxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y y x x++instance HasField "yyxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y y x y++instance HasField "yyxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y y x z++instance HasField "yyyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y _ -> i64vec4 y y y x++instance HasField "yyyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y _ -> i64vec4 y y y y++instance HasField "yyyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y y y z++instance HasField "yyzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y y z x++instance HasField "yyzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y y z y++instance HasField "yyzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y y z z++instance HasField "yzxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y z x x++instance HasField "yzxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y z x y++instance HasField "yzxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y z x z++instance HasField "yzyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y z y x++instance HasField "yzyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y z y y++instance HasField "yzyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y z y z++instance HasField "yzzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 y z z x++instance HasField "yzzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y z z y++instance HasField "yzzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 y z z z++instance HasField "zxxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z x x x++instance HasField "zxxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z x x y++instance HasField "zxxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z x x z++instance HasField "zxyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z x y x++instance HasField "zxyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z x y y++instance HasField "zxyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z x y z++instance HasField "zxzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z x z x++instance HasField "zxzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z x z y++instance HasField "zxzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z x z z++instance HasField "zyxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z y x x++instance HasField "zyxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z y x y++instance HasField "zyxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z y x z++instance HasField "zyyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z y y x++instance HasField "zyyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z y y y++instance HasField "zyyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z y y z++instance HasField "zyzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z y z x++instance HasField "zyzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z y z y++instance HasField "zyzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z y z z++instance HasField "zzxx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z z x x++instance HasField "zzxy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z z x y++instance HasField "zzxz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z z x z++instance HasField "zzyx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x y z -> i64vec4 z z y x++instance HasField "zzyy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z z y y++instance HasField "zzyz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z z y z++instance HasField "zzzx" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \x _ z -> i64vec4 z z z x++instance HasField "zzzy" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ y z -> i64vec4 z z z y++instance HasField "zzzz" I64Vec3 I64Vec4 where+ {-# INLINE getField #-}+ getField v = withI64Vec3 v \_ _ z -> i64vec4 z z z z
+ src/Geomancy/Swizzle/IVec/Down.hs view
@@ -0,0 +1,369 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.IVec.Down () where++import GHC.Records (HasField(..))++import Geomancy.IVec2 (IVec2, ivec2)+import Geomancy.IVec3 (IVec3, ivec3, withIVec3)+import Geomancy.IVec4 (IVec4, withIVec4)++instance HasField "xx" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ _ -> ivec2 x x++instance HasField "xy" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec2 x y++instance HasField "xz" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec2 x z++instance HasField "yx" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec2 y x++instance HasField "yy" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y _ -> ivec2 y y++instance HasField "yz" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec2 y z++instance HasField "zx" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec2 z x++instance HasField "zy" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec2 z y++instance HasField "zz" IVec3 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ _ z -> ivec2 z z++instance HasField "xx" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ _ -> ivec2 x x++instance HasField "xy" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec2 x y++instance HasField "xz" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec2 x z++instance HasField "xw" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec2 x w++instance HasField "yx" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec2 y x++instance HasField "yy" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ _ -> ivec2 y y++instance HasField "yz" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec2 y z++instance HasField "yw" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec2 y w++instance HasField "zx" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec2 z x++instance HasField "zy" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec2 z y++instance HasField "zz" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z _ -> ivec2 z z++instance HasField "zw" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec2 z w++instance HasField "wx" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec2 w x++instance HasField "wy" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec2 w y++instance HasField "wz" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec2 w z++instance HasField "ww" IVec4 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ _ w -> ivec2 w w++instance HasField "xxx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ _ -> ivec3 x x x++instance HasField "xxy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec3 x x y++instance HasField "xxz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec3 x x z++instance HasField "xxw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec3 x x w++instance HasField "xyx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec3 x y x++instance HasField "xyy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec3 x y y++instance HasField "xyz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec3 x y z++instance HasField "xyw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec3 x y w++instance HasField "xzx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec3 x z x++instance HasField "xzy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec3 x z y++instance HasField "xzz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec3 x z z++instance HasField "xzw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec3 x z w++instance HasField "xwx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec3 x w x++instance HasField "xwy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec3 x w y++instance HasField "xwz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec3 x w z++instance HasField "xww" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec3 x w w++instance HasField "yxx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec3 y x x++instance HasField "yxy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec3 y x y++instance HasField "yxz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec3 y x z++instance HasField "yxw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec3 y x w++instance HasField "yyx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec3 y y x++instance HasField "yyy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ _ -> ivec3 y y y++instance HasField "yyz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec3 y y z++instance HasField "yyw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec3 y y w++instance HasField "yzx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec3 y z x++instance HasField "yzy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec3 y z y++instance HasField "yzz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec3 y z z++instance HasField "yzw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec3 y z w++instance HasField "ywx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec3 y w x++instance HasField "ywy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec3 y w y++instance HasField "ywz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec3 y w z++instance HasField "yww" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec3 y w w++instance HasField "zxx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec3 z x x++instance HasField "zxy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec3 z x y++instance HasField "zxz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec3 z x z++instance HasField "zxw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec3 z x w++instance HasField "zyx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec3 z y x++instance HasField "zyy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec3 z y y++instance HasField "zyz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec3 z y z++instance HasField "zyw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec3 z y w++instance HasField "zzx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec3 z z x++instance HasField "zzy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec3 z z y++instance HasField "zzz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z _ -> ivec3 z z z++instance HasField "zzw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec3 z z w++instance HasField "zwx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec3 z w x++instance HasField "zwy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec3 z w y++instance HasField "zwz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec3 z w z++instance HasField "zww" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec3 z w w++instance HasField "wxx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec3 w x x++instance HasField "wxy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec3 w x y++instance HasField "wxz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec3 w x z++instance HasField "wxw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec3 w x w++instance HasField "wyx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec3 w y x++instance HasField "wyy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec3 w y y++instance HasField "wyz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec3 w y z++instance HasField "wyw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec3 w y w++instance HasField "wzx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec3 w z x++instance HasField "wzy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec3 w z y++instance HasField "wzz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec3 w z z++instance HasField "wzw" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec3 w z w++instance HasField "wwx" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec3 w w x++instance HasField "wwy" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec3 w w y++instance HasField "wwz" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec3 w w z++instance HasField "www" IVec4 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ _ w -> ivec3 w w w
+ src/Geomancy/Swizzle/IVec/Extend.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.IVec.Extend () where++import GHC.Records (HasField(..))++import Geomancy.IVec2 (IVec2, withIVec2)+import Geomancy.IVec3 (IVec3, ivec3, withIVec3)+import Geomancy.IVec4 (IVec4, ivec4)++instance HasField "xy0" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 x y 0++instance HasField "xy1" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 x y 1++instance HasField "xy00" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y 0 0++instance HasField "xy01" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y 0 1++instance HasField "xy10" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y 1 0++instance HasField "xy11" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y 1 1++instance HasField "xyz0" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y z 0++instance HasField "xyz1" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y z 1
+ src/Geomancy/Swizzle/IVec/Shuffle.hs view
@@ -0,0 +1,1161 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.IVec.Shuffle () where++import GHC.Records (HasField(..))++import Geomancy.IVec2 (IVec2, ivec2, withIVec2)+import Geomancy.IVec3 (IVec3, ivec3, withIVec3)+import Geomancy.IVec4 (IVec4, ivec4, withIVec4)++instance HasField "xx" IVec2 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x _ -> ivec2 x x++instance HasField "xy" IVec2 IVec2 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "yx" IVec2 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec2 y x++instance HasField "yy" IVec2 IVec2 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \_ y -> ivec2 y y++instance HasField "xxx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ _ -> ivec3 x x x++instance HasField "xxy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec3 x x y++instance HasField "xxz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec3 x x z++instance HasField "xyx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec3 x y x++instance HasField "xyy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec3 x y y++instance HasField "xyz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xzx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec3 x z x++instance HasField "xzy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec3 x z y++instance HasField "xzz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec3 x z z++instance HasField "yxx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec3 y x x++instance HasField "yxy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec3 y x y++instance HasField "yxz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec3 y x z++instance HasField "yyx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec3 y y x++instance HasField "yyy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y _ -> ivec3 y y y++instance HasField "yyz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec3 y y z++instance HasField "yzx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec3 y z x++instance HasField "yzy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec3 y z y++instance HasField "yzz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec3 y z z++instance HasField "zxx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec3 z x x++instance HasField "zxy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec3 z x y++instance HasField "zxz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec3 z x z++instance HasField "zyx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec3 z y x++instance HasField "zyy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec3 z y y++instance HasField "zyz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec3 z y z++instance HasField "zzx" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec3 z z x++instance HasField "zzy" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec3 z z y++instance HasField "zzz" IVec3 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ _ z -> ivec3 z z z++instance HasField "xxxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ _ -> ivec4 x x x x++instance HasField "xxxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x x x y++instance HasField "xxxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x x x z++instance HasField "xxxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x x x w++instance HasField "xxyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x x y x++instance HasField "xxyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x x y y++instance HasField "xxyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x x y z++instance HasField "xxyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x x y w++instance HasField "xxzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x x z x++instance HasField "xxzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x x z y++instance HasField "xxzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x x z z++instance HasField "xxzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x x z w++instance HasField "xxwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x x w x++instance HasField "xxwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x x w y++instance HasField "xxwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x x w z++instance HasField "xxww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x x w w++instance HasField "xyxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x y x x++instance HasField "xyxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x y x y++instance HasField "xyxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x y x z++instance HasField "xyxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x y x w++instance HasField "xyyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x y y x++instance HasField "xyyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 x y y y++instance HasField "xyyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x y y z++instance HasField "xyyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x y y w++instance HasField "xyzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x y z x++instance HasField "xyzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x y z y++instance HasField "xyzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x y z z++instance HasField "xyzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xywx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x y w x++instance HasField "xywy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x y w y++instance HasField "xywz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 x y w z++instance HasField "xyww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x y w w++instance HasField "xzxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x z x x++instance HasField "xzxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x z x y++instance HasField "xzxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x z x z++instance HasField "xzxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x z x w++instance HasField "xzyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x z y x++instance HasField "xzyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x z y y++instance HasField "xzyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x z y z++instance HasField "xzyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 x z y w++instance HasField "xzzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x z z x++instance HasField "xzzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 x z z y++instance HasField "xzzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 x z z z++instance HasField "xzzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x z z w++instance HasField "xzwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x z w x++instance HasField "xzwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 x z w y++instance HasField "xzwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x z w z++instance HasField "xzww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x z w w++instance HasField "xwxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x w x x++instance HasField "xwxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x w x y++instance HasField "xwxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x w x z++instance HasField "xwxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x w x w++instance HasField "xwyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x w y x++instance HasField "xwyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x w y y++instance HasField "xwyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 x w y z++instance HasField "xwyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x w y w++instance HasField "xwzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x w z x++instance HasField "xwzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 x w z y++instance HasField "xwzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x w z z++instance HasField "xwzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x w z w++instance HasField "xwwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x w w x++instance HasField "xwwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 x w w y++instance HasField "xwwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 x w w z++instance HasField "xwww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 x w w w++instance HasField "yxxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y x x x++instance HasField "yxxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y x x y++instance HasField "yxxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y x x z++instance HasField "yxxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y x x w++instance HasField "yxyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y x y x++instance HasField "yxyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y x y y++instance HasField "yxyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y x y z++instance HasField "yxyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y x y w++instance HasField "yxzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y x z x++instance HasField "yxzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y x z y++instance HasField "yxzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y x z z++instance HasField "yxzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 y x z w++instance HasField "yxwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y x w x++instance HasField "yxwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y x w y++instance HasField "yxwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 y x w z++instance HasField "yxww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y x w w++instance HasField "yyxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y y x x++instance HasField "yyxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y y x y++instance HasField "yyxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y y x z++instance HasField "yyxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y y x w++instance HasField "yyyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ _ -> ivec4 y y y x++instance HasField "yyyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ _ -> ivec4 y y y y++instance HasField "yyyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y y y z++instance HasField "yyyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y y y w++instance HasField "yyzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y y z x++instance HasField "yyzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y y z y++instance HasField "yyzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y y z z++instance HasField "yyzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y y z w++instance HasField "yywx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y y w x++instance HasField "yywy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y y w y++instance HasField "yywz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y y w z++instance HasField "yyww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y y w w++instance HasField "yzxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y z x x++instance HasField "yzxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y z x y++instance HasField "yzxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y z x z++instance HasField "yzxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 y z x w++instance HasField "yzyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y z y x++instance HasField "yzyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y z y y++instance HasField "yzyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y z y z++instance HasField "yzyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y z y w++instance HasField "yzzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 y z z x++instance HasField "yzzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y z z y++instance HasField "yzzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 y z z z++instance HasField "yzzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y z z w++instance HasField "yzwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 y z w x++instance HasField "yzwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y z w y++instance HasField "yzwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y z w z++instance HasField "yzww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y z w w++instance HasField "ywxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y w x x++instance HasField "ywxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y w x y++instance HasField "ywxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 y w x z++instance HasField "ywxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y w x w++instance HasField "ywyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y w y x++instance HasField "ywyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y w y y++instance HasField "ywyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y w y z++instance HasField "ywyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y w y w++instance HasField "ywzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 y w z x++instance HasField "ywzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y w z y++instance HasField "ywzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y w z z++instance HasField "ywzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y w z w++instance HasField "ywwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 y w w x++instance HasField "ywwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y w w y++instance HasField "ywwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 y w w z++instance HasField "ywww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 y w w w++instance HasField "zxxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z x x x++instance HasField "zxxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z x x y++instance HasField "zxxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z x x z++instance HasField "zxxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z x x w++instance HasField "zxyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z x y x++instance HasField "zxyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z x y y++instance HasField "zxyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z x y z++instance HasField "zxyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 z x y w++instance HasField "zxzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z x z x++instance HasField "zxzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z x z y++instance HasField "zxzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z x z z++instance HasField "zxzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z x z w++instance HasField "zxwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z x w x++instance HasField "zxwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 z x w y++instance HasField "zxwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z x w z++instance HasField "zxww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z x w w++instance HasField "zyxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z y x x++instance HasField "zyxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z y x y++instance HasField "zyxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z y x z++instance HasField "zyxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 z y x w++instance HasField "zyyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z y y x++instance HasField "zyyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z y y y++instance HasField "zyyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z y y z++instance HasField "zyyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z y y w++instance HasField "zyzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z y z x++instance HasField "zyzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z y z y++instance HasField "zyzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z y z z++instance HasField "zyzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z y z w++instance HasField "zywx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 z y w x++instance HasField "zywy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z y w y++instance HasField "zywz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z y w z++instance HasField "zyww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z y w w++instance HasField "zzxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z z x x++instance HasField "zzxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z z x y++instance HasField "zzxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z z x z++instance HasField "zzxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z z x w++instance HasField "zzyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z _ -> ivec4 z z y x++instance HasField "zzyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z z y y++instance HasField "zzyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z z y z++instance HasField "zzyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z z y w++instance HasField "zzzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z _ -> ivec4 z z z x++instance HasField "zzzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z _ -> ivec4 z z z y++instance HasField "zzzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z _ -> ivec4 z z z z++instance HasField "zzzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z z z w++instance HasField "zzwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z z w x++instance HasField "zzwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z z w y++instance HasField "zzwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z z w z++instance HasField "zzww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z z w w++instance HasField "zwxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z w x x++instance HasField "zwxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 z w x y++instance HasField "zwxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z w x z++instance HasField "zwxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z w x w++instance HasField "zwyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 z w y x++instance HasField "zwyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z w y y++instance HasField "zwyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z w y z++instance HasField "zwyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z w y w++instance HasField "zwzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z w z x++instance HasField "zwzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z w z y++instance HasField "zwzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z w z z++instance HasField "zwzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z w z w++instance HasField "zwwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 z w w x++instance HasField "zwwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 z w w y++instance HasField "zwwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z w w z++instance HasField "zwww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 z w w w++instance HasField "wxxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w x x x++instance HasField "wxxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w x x y++instance HasField "wxxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w x x z++instance HasField "wxxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w x x w++instance HasField "wxyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w x y x++instance HasField "wxyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w x y y++instance HasField "wxyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 w x y z++instance HasField "wxyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w x y w++instance HasField "wxzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w x z x++instance HasField "wxzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 w x z y++instance HasField "wxzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w x z z++instance HasField "wxzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w x z w++instance HasField "wxwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w x w x++instance HasField "wxwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w x w y++instance HasField "wxwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w x w z++instance HasField "wxww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w x w w++instance HasField "wyxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w y x x++instance HasField "wyxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w y x y++instance HasField "wyxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 w y x z++instance HasField "wyxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w y x w++instance HasField "wyyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w y y x++instance HasField "wyyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w y y y++instance HasField "wyyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w y y z++instance HasField "wyyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w y y w++instance HasField "wyzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 w y z x++instance HasField "wyzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w y z y++instance HasField "wyzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w y z z++instance HasField "wyzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w y z w++instance HasField "wywx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w y w x++instance HasField "wywy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w y w y++instance HasField "wywz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w y w z++instance HasField "wyww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w y w w++instance HasField "wzxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w z x x++instance HasField "wzxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 w z x y++instance HasField "wzxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w z x z++instance HasField "wzxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w z x w++instance HasField "wzyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y z w -> ivec4 w z y x++instance HasField "wzyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w z y y++instance HasField "wzyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w z y z++instance HasField "wzyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w z y w++instance HasField "wzzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w z z x++instance HasField "wzzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w z z y++instance HasField "wzzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w z z z++instance HasField "wzzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w z z w++instance HasField "wzwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w z w x++instance HasField "wzwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w z w y++instance HasField "wzwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w z w z++instance HasField "wzww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w z w w++instance HasField "wwxx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w w x x++instance HasField "wwxy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w w x y++instance HasField "wwxz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w w x z++instance HasField "wwxw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w w x w++instance HasField "wwyx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x y _ w -> ivec4 w w y x++instance HasField "wwyy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w w y y++instance HasField "wwyz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w w y z++instance HasField "wwyw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w w y w++instance HasField "wwzx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ z w -> ivec4 w w z x++instance HasField "wwzy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y z w -> ivec4 w w z y++instance HasField "wwzz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w w z z++instance HasField "wwzw" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w w z w++instance HasField "wwwx" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \x _ _ w -> ivec4 w w w x++instance HasField "wwwy" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ y _ w -> ivec4 w w w y++instance HasField "wwwz" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ z w -> ivec4 w w w z++instance HasField "wwww" IVec4 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec4 v \_ _ _ w -> ivec4 w w w w
+ src/Geomancy/Swizzle/IVec/Up.hs view
@@ -0,0 +1,433 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.IVec.Up () where++import GHC.Records (HasField(..))++import Geomancy.IVec2 (IVec2, withIVec2)+import Geomancy.IVec3 (IVec3, ivec3, withIVec3)+import Geomancy.IVec4 (IVec4, ivec4)++instance HasField "xxx" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x _ -> ivec3 x x x++instance HasField "xxy" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 x x y++instance HasField "xyx" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 x y x++instance HasField "xyy" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 x y y++instance HasField "yxx" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 y x x++instance HasField "yxy" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 y x y++instance HasField "yyx" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec3 y y x++instance HasField "yyy" IVec2 IVec3 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \_ y -> ivec3 y y y++instance HasField "xxxx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x _ -> ivec4 x x x x++instance HasField "xxxy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x x x y++instance HasField "xxyx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x x y x++instance HasField "xxyy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x x y y++instance HasField "xyxx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y x x++instance HasField "xyxy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y x y++instance HasField "xyyx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y y x++instance HasField "xyyy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 x y y y++instance HasField "yxxx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y x x x++instance HasField "yxxy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y x x y++instance HasField "yxyx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y x y x++instance HasField "yxyy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y x y y++instance HasField "yyxx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y y x x++instance HasField "yyxy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y y x y++instance HasField "yyyx" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \x y -> ivec4 y y y x++instance HasField "yyyy" IVec2 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec2 v \_ y -> ivec4 y y y y++instance HasField "xxxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ _ -> ivec4 x x x x++instance HasField "xxxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x x x y++instance HasField "xxxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x x x z++instance HasField "xxyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x x y x++instance HasField "xxyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x x y y++instance HasField "xxyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x x y z++instance HasField "xxzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x x z x++instance HasField "xxzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x x z y++instance HasField "xxzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x x z z++instance HasField "xyxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x y x x++instance HasField "xyxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x y x y++instance HasField "xyxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y x z++instance HasField "xyyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x y y x++instance HasField "xyyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 x y y y++instance HasField "xyyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y y z++instance HasField "xyzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y z x++instance HasField "xyzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y z y++instance HasField "xyzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x y z z++instance HasField "xzxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x z x x++instance HasField "xzxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x z x y++instance HasField "xzxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x z x z++instance HasField "xzyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x z y x++instance HasField "xzyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x z y y++instance HasField "xzyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x z y z++instance HasField "xzzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x z z x++instance HasField "xzzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 x z z y++instance HasField "xzzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 x z z z++instance HasField "yxxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y x x x++instance HasField "yxxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y x x y++instance HasField "yxxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y x x z++instance HasField "yxyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y x y x++instance HasField "yxyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y x y y++instance HasField "yxyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y x y z++instance HasField "yxzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y x z x++instance HasField "yxzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y x z y++instance HasField "yxzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y x z z++instance HasField "yyxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y y x x++instance HasField "yyxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y y x y++instance HasField "yyxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y y x z++instance HasField "yyyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y _ -> ivec4 y y y x++instance HasField "yyyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y _ -> ivec4 y y y y++instance HasField "yyyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y y y z++instance HasField "yyzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y y z x++instance HasField "yyzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y y z y++instance HasField "yyzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y y z z++instance HasField "yzxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y z x x++instance HasField "yzxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y z x y++instance HasField "yzxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y z x z++instance HasField "yzyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y z y x++instance HasField "yzyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y z y y++instance HasField "yzyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y z y z++instance HasField "yzzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 y z z x++instance HasField "yzzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y z z y++instance HasField "yzzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 y z z z++instance HasField "zxxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z x x x++instance HasField "zxxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z x x y++instance HasField "zxxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z x x z++instance HasField "zxyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z x y x++instance HasField "zxyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z x y y++instance HasField "zxyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z x y z++instance HasField "zxzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z x z x++instance HasField "zxzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z x z y++instance HasField "zxzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z x z z++instance HasField "zyxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z y x x++instance HasField "zyxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z y x y++instance HasField "zyxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z y x z++instance HasField "zyyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z y y x++instance HasField "zyyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z y y y++instance HasField "zyyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z y y z++instance HasField "zyzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z y z x++instance HasField "zyzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z y z y++instance HasField "zyzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z y z z++instance HasField "zzxx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z z x x++instance HasField "zzxy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z z x y++instance HasField "zzxz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z z x z++instance HasField "zzyx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x y z -> ivec4 z z y x++instance HasField "zzyy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z z y y++instance HasField "zzyz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z z y z++instance HasField "zzzx" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \x _ z -> ivec4 z z z x++instance HasField "zzzy" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ y z -> ivec4 z z z y++instance HasField "zzzz" IVec3 IVec4 where+ {-# INLINE getField #-}+ getField v = withIVec3 v \_ _ z -> ivec4 z z z z
+ src/Geomancy/Swizzle/U64Vec/Down.hs view
@@ -0,0 +1,369 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.U64Vec.Down () where++import GHC.Records (HasField(..))++import Geomancy.U64Vec2 (U64Vec2, u64vec2)+import Geomancy.U64Vec3 (U64Vec3, u64vec3, withU64Vec3)+import Geomancy.U64Vec4 (U64Vec4, withU64Vec4)++instance HasField "xx" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ _ -> u64vec2 x x++instance HasField "xy" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec2 x y++instance HasField "xz" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec2 x z++instance HasField "yx" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec2 y x++instance HasField "yy" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y _ -> u64vec2 y y++instance HasField "yz" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec2 y z++instance HasField "zx" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec2 z x++instance HasField "zy" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec2 z y++instance HasField "zz" U64Vec3 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ _ z -> u64vec2 z z++instance HasField "xx" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ _ -> u64vec2 x x++instance HasField "xy" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec2 x y++instance HasField "xz" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec2 x z++instance HasField "xw" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec2 x w++instance HasField "yx" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec2 y x++instance HasField "yy" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ _ -> u64vec2 y y++instance HasField "yz" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec2 y z++instance HasField "yw" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec2 y w++instance HasField "zx" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec2 z x++instance HasField "zy" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec2 z y++instance HasField "zz" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z _ -> u64vec2 z z++instance HasField "zw" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec2 z w++instance HasField "wx" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec2 w x++instance HasField "wy" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec2 w y++instance HasField "wz" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec2 w z++instance HasField "ww" U64Vec4 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ _ w -> u64vec2 w w++instance HasField "xxx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ _ -> u64vec3 x x x++instance HasField "xxy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec3 x x y++instance HasField "xxz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec3 x x z++instance HasField "xxw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec3 x x w++instance HasField "xyx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec3 x y x++instance HasField "xyy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec3 x y y++instance HasField "xyz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec3 x y z++instance HasField "xyw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec3 x y w++instance HasField "xzx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec3 x z x++instance HasField "xzy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec3 x z y++instance HasField "xzz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec3 x z z++instance HasField "xzw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec3 x z w++instance HasField "xwx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec3 x w x++instance HasField "xwy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec3 x w y++instance HasField "xwz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec3 x w z++instance HasField "xww" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec3 x w w++instance HasField "yxx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec3 y x x++instance HasField "yxy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec3 y x y++instance HasField "yxz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec3 y x z++instance HasField "yxw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec3 y x w++instance HasField "yyx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec3 y y x++instance HasField "yyy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ _ -> u64vec3 y y y++instance HasField "yyz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec3 y y z++instance HasField "yyw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec3 y y w++instance HasField "yzx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec3 y z x++instance HasField "yzy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec3 y z y++instance HasField "yzz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec3 y z z++instance HasField "yzw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec3 y z w++instance HasField "ywx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec3 y w x++instance HasField "ywy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec3 y w y++instance HasField "ywz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec3 y w z++instance HasField "yww" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec3 y w w++instance HasField "zxx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec3 z x x++instance HasField "zxy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec3 z x y++instance HasField "zxz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec3 z x z++instance HasField "zxw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec3 z x w++instance HasField "zyx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec3 z y x++instance HasField "zyy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec3 z y y++instance HasField "zyz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec3 z y z++instance HasField "zyw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec3 z y w++instance HasField "zzx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec3 z z x++instance HasField "zzy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec3 z z y++instance HasField "zzz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z _ -> u64vec3 z z z++instance HasField "zzw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec3 z z w++instance HasField "zwx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec3 z w x++instance HasField "zwy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec3 z w y++instance HasField "zwz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec3 z w z++instance HasField "zww" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec3 z w w++instance HasField "wxx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec3 w x x++instance HasField "wxy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec3 w x y++instance HasField "wxz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec3 w x z++instance HasField "wxw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec3 w x w++instance HasField "wyx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec3 w y x++instance HasField "wyy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec3 w y y++instance HasField "wyz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec3 w y z++instance HasField "wyw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec3 w y w++instance HasField "wzx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec3 w z x++instance HasField "wzy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec3 w z y++instance HasField "wzz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec3 w z z++instance HasField "wzw" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec3 w z w++instance HasField "wwx" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec3 w w x++instance HasField "wwy" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec3 w w y++instance HasField "wwz" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec3 w w z++instance HasField "www" U64Vec4 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ _ w -> u64vec3 w w w
+ src/Geomancy/Swizzle/U64Vec/Extend.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.U64Vec.Extend () where++import GHC.Records (HasField(..))++import Geomancy.U64Vec2 (U64Vec2, withU64Vec2)+import Geomancy.U64Vec3 (U64Vec3, u64vec3, withU64Vec3)+import Geomancy.U64Vec4 (U64Vec4, u64vec4)++instance HasField "xy0" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 x y 0++instance HasField "xy1" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 x y 1++instance HasField "xy00" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y 0 0++instance HasField "xy01" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y 0 1++instance HasField "xy10" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y 1 0++instance HasField "xy11" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y 1 1++instance HasField "xyz0" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y z 0++instance HasField "xyz1" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y z 1
+ src/Geomancy/Swizzle/U64Vec/Shuffle.hs view
@@ -0,0 +1,1161 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.U64Vec.Shuffle () where++import GHC.Records (HasField(..))++import Geomancy.U64Vec2 (U64Vec2, u64vec2, withU64Vec2)+import Geomancy.U64Vec3 (U64Vec3, u64vec3, withU64Vec3)+import Geomancy.U64Vec4 (U64Vec4, u64vec4, withU64Vec4)++instance HasField "xx" U64Vec2 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x _ -> u64vec2 x x++instance HasField "xy" U64Vec2 U64Vec2 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "yx" U64Vec2 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec2 y x++instance HasField "yy" U64Vec2 U64Vec2 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \_ y -> u64vec2 y y++instance HasField "xxx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ _ -> u64vec3 x x x++instance HasField "xxy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec3 x x y++instance HasField "xxz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec3 x x z++instance HasField "xyx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec3 x y x++instance HasField "xyy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec3 x y y++instance HasField "xyz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xzx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec3 x z x++instance HasField "xzy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec3 x z y++instance HasField "xzz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec3 x z z++instance HasField "yxx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec3 y x x++instance HasField "yxy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec3 y x y++instance HasField "yxz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec3 y x z++instance HasField "yyx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec3 y y x++instance HasField "yyy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y _ -> u64vec3 y y y++instance HasField "yyz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec3 y y z++instance HasField "yzx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec3 y z x++instance HasField "yzy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec3 y z y++instance HasField "yzz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec3 y z z++instance HasField "zxx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec3 z x x++instance HasField "zxy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec3 z x y++instance HasField "zxz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec3 z x z++instance HasField "zyx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec3 z y x++instance HasField "zyy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec3 z y y++instance HasField "zyz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec3 z y z++instance HasField "zzx" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec3 z z x++instance HasField "zzy" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec3 z z y++instance HasField "zzz" U64Vec3 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ _ z -> u64vec3 z z z++instance HasField "xxxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ _ -> u64vec4 x x x x++instance HasField "xxxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x x x y++instance HasField "xxxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x x x z++instance HasField "xxxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x x x w++instance HasField "xxyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x x y x++instance HasField "xxyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x x y y++instance HasField "xxyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x x y z++instance HasField "xxyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x x y w++instance HasField "xxzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x x z x++instance HasField "xxzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x x z y++instance HasField "xxzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x x z z++instance HasField "xxzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x x z w++instance HasField "xxwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x x w x++instance HasField "xxwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x x w y++instance HasField "xxwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x x w z++instance HasField "xxww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x x w w++instance HasField "xyxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x y x x++instance HasField "xyxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x y x y++instance HasField "xyxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x y x z++instance HasField "xyxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x y x w++instance HasField "xyyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x y y x++instance HasField "xyyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 x y y y++instance HasField "xyyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x y y z++instance HasField "xyyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x y y w++instance HasField "xyzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x y z x++instance HasField "xyzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x y z y++instance HasField "xyzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x y z z++instance HasField "xyzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xywx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x y w x++instance HasField "xywy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x y w y++instance HasField "xywz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 x y w z++instance HasField "xyww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x y w w++instance HasField "xzxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x z x x++instance HasField "xzxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x z x y++instance HasField "xzxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x z x z++instance HasField "xzxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x z x w++instance HasField "xzyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x z y x++instance HasField "xzyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x z y y++instance HasField "xzyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x z y z++instance HasField "xzyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 x z y w++instance HasField "xzzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x z z x++instance HasField "xzzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 x z z y++instance HasField "xzzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 x z z z++instance HasField "xzzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x z z w++instance HasField "xzwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x z w x++instance HasField "xzwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 x z w y++instance HasField "xzwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x z w z++instance HasField "xzww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x z w w++instance HasField "xwxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x w x x++instance HasField "xwxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x w x y++instance HasField "xwxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x w x z++instance HasField "xwxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x w x w++instance HasField "xwyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x w y x++instance HasField "xwyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x w y y++instance HasField "xwyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 x w y z++instance HasField "xwyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x w y w++instance HasField "xwzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x w z x++instance HasField "xwzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 x w z y++instance HasField "xwzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x w z z++instance HasField "xwzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x w z w++instance HasField "xwwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x w w x++instance HasField "xwwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 x w w y++instance HasField "xwwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 x w w z++instance HasField "xwww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 x w w w++instance HasField "yxxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y x x x++instance HasField "yxxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y x x y++instance HasField "yxxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y x x z++instance HasField "yxxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y x x w++instance HasField "yxyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y x y x++instance HasField "yxyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y x y y++instance HasField "yxyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y x y z++instance HasField "yxyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y x y w++instance HasField "yxzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y x z x++instance HasField "yxzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y x z y++instance HasField "yxzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y x z z++instance HasField "yxzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 y x z w++instance HasField "yxwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y x w x++instance HasField "yxwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y x w y++instance HasField "yxwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 y x w z++instance HasField "yxww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y x w w++instance HasField "yyxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y y x x++instance HasField "yyxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y y x y++instance HasField "yyxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y y x z++instance HasField "yyxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y y x w++instance HasField "yyyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ _ -> u64vec4 y y y x++instance HasField "yyyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ _ -> u64vec4 y y y y++instance HasField "yyyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y y y z++instance HasField "yyyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y y y w++instance HasField "yyzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y y z x++instance HasField "yyzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y y z y++instance HasField "yyzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y y z z++instance HasField "yyzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y y z w++instance HasField "yywx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y y w x++instance HasField "yywy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y y w y++instance HasField "yywz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y y w z++instance HasField "yyww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y y w w++instance HasField "yzxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y z x x++instance HasField "yzxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y z x y++instance HasField "yzxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y z x z++instance HasField "yzxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 y z x w++instance HasField "yzyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y z y x++instance HasField "yzyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y z y y++instance HasField "yzyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y z y z++instance HasField "yzyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y z y w++instance HasField "yzzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 y z z x++instance HasField "yzzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y z z y++instance HasField "yzzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 y z z z++instance HasField "yzzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y z z w++instance HasField "yzwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 y z w x++instance HasField "yzwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y z w y++instance HasField "yzwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y z w z++instance HasField "yzww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y z w w++instance HasField "ywxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y w x x++instance HasField "ywxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y w x y++instance HasField "ywxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 y w x z++instance HasField "ywxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y w x w++instance HasField "ywyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y w y x++instance HasField "ywyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y w y y++instance HasField "ywyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y w y z++instance HasField "ywyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y w y w++instance HasField "ywzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 y w z x++instance HasField "ywzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y w z y++instance HasField "ywzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y w z z++instance HasField "ywzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y w z w++instance HasField "ywwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 y w w x++instance HasField "ywwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y w w y++instance HasField "ywwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 y w w z++instance HasField "ywww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 y w w w++instance HasField "zxxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z x x x++instance HasField "zxxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z x x y++instance HasField "zxxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z x x z++instance HasField "zxxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z x x w++instance HasField "zxyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z x y x++instance HasField "zxyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z x y y++instance HasField "zxyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z x y z++instance HasField "zxyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 z x y w++instance HasField "zxzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z x z x++instance HasField "zxzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z x z y++instance HasField "zxzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z x z z++instance HasField "zxzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z x z w++instance HasField "zxwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z x w x++instance HasField "zxwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 z x w y++instance HasField "zxwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z x w z++instance HasField "zxww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z x w w++instance HasField "zyxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z y x x++instance HasField "zyxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z y x y++instance HasField "zyxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z y x z++instance HasField "zyxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 z y x w++instance HasField "zyyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z y y x++instance HasField "zyyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z y y y++instance HasField "zyyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z y y z++instance HasField "zyyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z y y w++instance HasField "zyzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z y z x++instance HasField "zyzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z y z y++instance HasField "zyzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z y z z++instance HasField "zyzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z y z w++instance HasField "zywx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 z y w x++instance HasField "zywy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z y w y++instance HasField "zywz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z y w z++instance HasField "zyww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z y w w++instance HasField "zzxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z z x x++instance HasField "zzxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z z x y++instance HasField "zzxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z z x z++instance HasField "zzxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z z x w++instance HasField "zzyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z _ -> u64vec4 z z y x++instance HasField "zzyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z z y y++instance HasField "zzyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z z y z++instance HasField "zzyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z z y w++instance HasField "zzzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z _ -> u64vec4 z z z x++instance HasField "zzzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z _ -> u64vec4 z z z y++instance HasField "zzzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z _ -> u64vec4 z z z z++instance HasField "zzzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z z z w++instance HasField "zzwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z z w x++instance HasField "zzwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z z w y++instance HasField "zzwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z z w z++instance HasField "zzww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z z w w++instance HasField "zwxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z w x x++instance HasField "zwxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 z w x y++instance HasField "zwxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z w x z++instance HasField "zwxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z w x w++instance HasField "zwyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 z w y x++instance HasField "zwyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z w y y++instance HasField "zwyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z w y z++instance HasField "zwyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z w y w++instance HasField "zwzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z w z x++instance HasField "zwzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z w z y++instance HasField "zwzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z w z z++instance HasField "zwzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z w z w++instance HasField "zwwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 z w w x++instance HasField "zwwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 z w w y++instance HasField "zwwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z w w z++instance HasField "zwww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 z w w w++instance HasField "wxxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w x x x++instance HasField "wxxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w x x y++instance HasField "wxxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w x x z++instance HasField "wxxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w x x w++instance HasField "wxyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w x y x++instance HasField "wxyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w x y y++instance HasField "wxyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 w x y z++instance HasField "wxyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w x y w++instance HasField "wxzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w x z x++instance HasField "wxzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 w x z y++instance HasField "wxzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w x z z++instance HasField "wxzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w x z w++instance HasField "wxwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w x w x++instance HasField "wxwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w x w y++instance HasField "wxwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w x w z++instance HasField "wxww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w x w w++instance HasField "wyxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w y x x++instance HasField "wyxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w y x y++instance HasField "wyxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 w y x z++instance HasField "wyxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w y x w++instance HasField "wyyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w y y x++instance HasField "wyyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w y y y++instance HasField "wyyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w y y z++instance HasField "wyyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w y y w++instance HasField "wyzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 w y z x++instance HasField "wyzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w y z y++instance HasField "wyzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w y z z++instance HasField "wyzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w y z w++instance HasField "wywx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w y w x++instance HasField "wywy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w y w y++instance HasField "wywz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w y w z++instance HasField "wyww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w y w w++instance HasField "wzxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w z x x++instance HasField "wzxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 w z x y++instance HasField "wzxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w z x z++instance HasField "wzxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w z x w++instance HasField "wzyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y z w -> u64vec4 w z y x++instance HasField "wzyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w z y y++instance HasField "wzyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w z y z++instance HasField "wzyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w z y w++instance HasField "wzzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w z z x++instance HasField "wzzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w z z y++instance HasField "wzzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w z z z++instance HasField "wzzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w z z w++instance HasField "wzwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w z w x++instance HasField "wzwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w z w y++instance HasField "wzwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w z w z++instance HasField "wzww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w z w w++instance HasField "wwxx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w w x x++instance HasField "wwxy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w w x y++instance HasField "wwxz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w w x z++instance HasField "wwxw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w w x w++instance HasField "wwyx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x y _ w -> u64vec4 w w y x++instance HasField "wwyy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w w y y++instance HasField "wwyz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w w y z++instance HasField "wwyw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w w y w++instance HasField "wwzx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ z w -> u64vec4 w w z x++instance HasField "wwzy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y z w -> u64vec4 w w z y++instance HasField "wwzz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w w z z++instance HasField "wwzw" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w w z w++instance HasField "wwwx" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ w -> u64vec4 w w w x++instance HasField "wwwy" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ w -> u64vec4 w w w y++instance HasField "wwwz" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z w -> u64vec4 w w w z++instance HasField "wwww" U64Vec4 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ _ w -> u64vec4 w w w w
+ src/Geomancy/Swizzle/U64Vec/Up.hs view
@@ -0,0 +1,433 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.U64Vec.Up () where++import GHC.Records (HasField(..))++import Geomancy.U64Vec2 (U64Vec2, withU64Vec2)+import Geomancy.U64Vec3 (U64Vec3, u64vec3, withU64Vec3)+import Geomancy.U64Vec4 (U64Vec4, u64vec4)++instance HasField "xxx" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x _ -> u64vec3 x x x++instance HasField "xxy" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 x x y++instance HasField "xyx" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 x y x++instance HasField "xyy" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 x y y++instance HasField "yxx" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 y x x++instance HasField "yxy" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 y x y++instance HasField "yyx" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec3 y y x++instance HasField "yyy" U64Vec2 U64Vec3 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \_ y -> u64vec3 y y y++instance HasField "xxxx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x _ -> u64vec4 x x x x++instance HasField "xxxy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x x x y++instance HasField "xxyx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x x y x++instance HasField "xxyy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x x y y++instance HasField "xyxx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y x x++instance HasField "xyxy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y x y++instance HasField "xyyx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y y x++instance HasField "xyyy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 x y y y++instance HasField "yxxx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y x x x++instance HasField "yxxy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y x x y++instance HasField "yxyx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y x y x++instance HasField "yxyy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y x y y++instance HasField "yyxx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y y x x++instance HasField "yyxy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y y x y++instance HasField "yyyx" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x y -> u64vec4 y y y x++instance HasField "yyyy" U64Vec2 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \_ y -> u64vec4 y y y y++instance HasField "xxxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ _ -> u64vec4 x x x x++instance HasField "xxxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x x x y++instance HasField "xxxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x x x z++instance HasField "xxyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x x y x++instance HasField "xxyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x x y y++instance HasField "xxyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x x y z++instance HasField "xxzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x x z x++instance HasField "xxzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x x z y++instance HasField "xxzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x x z z++instance HasField "xyxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x y x x++instance HasField "xyxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x y x y++instance HasField "xyxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y x z++instance HasField "xyyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x y y x++instance HasField "xyyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 x y y y++instance HasField "xyyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y y z++instance HasField "xyzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y z x++instance HasField "xyzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y z y++instance HasField "xyzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x y z z++instance HasField "xzxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x z x x++instance HasField "xzxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x z x y++instance HasField "xzxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x z x z++instance HasField "xzyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x z y x++instance HasField "xzyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x z y y++instance HasField "xzyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x z y z++instance HasField "xzzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x z z x++instance HasField "xzzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 x z z y++instance HasField "xzzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 x z z z++instance HasField "yxxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y x x x++instance HasField "yxxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y x x y++instance HasField "yxxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y x x z++instance HasField "yxyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y x y x++instance HasField "yxyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y x y y++instance HasField "yxyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y x y z++instance HasField "yxzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y x z x++instance HasField "yxzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y x z y++instance HasField "yxzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y x z z++instance HasField "yyxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y y x x++instance HasField "yyxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y y x y++instance HasField "yyxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y y x z++instance HasField "yyyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y _ -> u64vec4 y y y x++instance HasField "yyyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y _ -> u64vec4 y y y y++instance HasField "yyyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y y y z++instance HasField "yyzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y y z x++instance HasField "yyzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y y z y++instance HasField "yyzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y y z z++instance HasField "yzxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y z x x++instance HasField "yzxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y z x y++instance HasField "yzxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y z x z++instance HasField "yzyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y z y x++instance HasField "yzyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y z y y++instance HasField "yzyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y z y z++instance HasField "yzzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 y z z x++instance HasField "yzzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y z z y++instance HasField "yzzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 y z z z++instance HasField "zxxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z x x x++instance HasField "zxxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z x x y++instance HasField "zxxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z x x z++instance HasField "zxyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z x y x++instance HasField "zxyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z x y y++instance HasField "zxyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z x y z++instance HasField "zxzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z x z x++instance HasField "zxzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z x z y++instance HasField "zxzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z x z z++instance HasField "zyxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z y x x++instance HasField "zyxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z y x y++instance HasField "zyxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z y x z++instance HasField "zyyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z y y x++instance HasField "zyyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z y y y++instance HasField "zyyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z y y z++instance HasField "zyzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z y z x++instance HasField "zyzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z y z y++instance HasField "zyzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z y z z++instance HasField "zzxx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z z x x++instance HasField "zzxy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z z x y++instance HasField "zzxz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z z x z++instance HasField "zzyx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x y z -> u64vec4 z z y x++instance HasField "zzyy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z z y y++instance HasField "zzyz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z z y z++instance HasField "zzzx" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ z -> u64vec4 z z z x++instance HasField "zzzy" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y z -> u64vec4 z z z y++instance HasField "zzzz" U64Vec3 U64Vec4 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ _ z -> u64vec4 z z z z
+ src/Geomancy/Swizzle/UVec/Down.hs view
@@ -0,0 +1,369 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.UVec.Down () where++import GHC.Records (HasField(..))++import Geomancy.UVec2 (UVec2, uvec2)+import Geomancy.UVec3 (UVec3, uvec3, withUVec3)+import Geomancy.UVec4 (UVec4, withUVec4)++instance HasField "xx" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ _ -> uvec2 x x++instance HasField "xy" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec2 x y++instance HasField "xz" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec2 x z++instance HasField "yx" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec2 y x++instance HasField "yy" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y _ -> uvec2 y y++instance HasField "yz" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec2 y z++instance HasField "zx" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec2 z x++instance HasField "zy" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec2 z y++instance HasField "zz" UVec3 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ _ z -> uvec2 z z++instance HasField "xx" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ _ -> uvec2 x x++instance HasField "xy" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec2 x y++instance HasField "xz" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec2 x z++instance HasField "xw" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec2 x w++instance HasField "yx" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec2 y x++instance HasField "yy" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ _ -> uvec2 y y++instance HasField "yz" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec2 y z++instance HasField "yw" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec2 y w++instance HasField "zx" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec2 z x++instance HasField "zy" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec2 z y++instance HasField "zz" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z _ -> uvec2 z z++instance HasField "zw" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec2 z w++instance HasField "wx" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec2 w x++instance HasField "wy" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec2 w y++instance HasField "wz" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec2 w z++instance HasField "ww" UVec4 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ _ w -> uvec2 w w++instance HasField "xxx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ _ -> uvec3 x x x++instance HasField "xxy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec3 x x y++instance HasField "xxz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec3 x x z++instance HasField "xxw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec3 x x w++instance HasField "xyx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec3 x y x++instance HasField "xyy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec3 x y y++instance HasField "xyz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec3 x y z++instance HasField "xyw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec3 x y w++instance HasField "xzx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec3 x z x++instance HasField "xzy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec3 x z y++instance HasField "xzz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec3 x z z++instance HasField "xzw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec3 x z w++instance HasField "xwx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec3 x w x++instance HasField "xwy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec3 x w y++instance HasField "xwz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec3 x w z++instance HasField "xww" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec3 x w w++instance HasField "yxx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec3 y x x++instance HasField "yxy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec3 y x y++instance HasField "yxz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec3 y x z++instance HasField "yxw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec3 y x w++instance HasField "yyx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec3 y y x++instance HasField "yyy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ _ -> uvec3 y y y++instance HasField "yyz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec3 y y z++instance HasField "yyw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec3 y y w++instance HasField "yzx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec3 y z x++instance HasField "yzy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec3 y z y++instance HasField "yzz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec3 y z z++instance HasField "yzw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec3 y z w++instance HasField "ywx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec3 y w x++instance HasField "ywy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec3 y w y++instance HasField "ywz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec3 y w z++instance HasField "yww" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec3 y w w++instance HasField "zxx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec3 z x x++instance HasField "zxy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec3 z x y++instance HasField "zxz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec3 z x z++instance HasField "zxw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec3 z x w++instance HasField "zyx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec3 z y x++instance HasField "zyy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec3 z y y++instance HasField "zyz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec3 z y z++instance HasField "zyw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec3 z y w++instance HasField "zzx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec3 z z x++instance HasField "zzy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec3 z z y++instance HasField "zzz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z _ -> uvec3 z z z++instance HasField "zzw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec3 z z w++instance HasField "zwx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec3 z w x++instance HasField "zwy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec3 z w y++instance HasField "zwz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec3 z w z++instance HasField "zww" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec3 z w w++instance HasField "wxx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec3 w x x++instance HasField "wxy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec3 w x y++instance HasField "wxz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec3 w x z++instance HasField "wxw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec3 w x w++instance HasField "wyx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec3 w y x++instance HasField "wyy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec3 w y y++instance HasField "wyz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec3 w y z++instance HasField "wyw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec3 w y w++instance HasField "wzx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec3 w z x++instance HasField "wzy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec3 w z y++instance HasField "wzz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec3 w z z++instance HasField "wzw" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec3 w z w++instance HasField "wwx" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec3 w w x++instance HasField "wwy" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec3 w w y++instance HasField "wwz" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec3 w w z++instance HasField "www" UVec4 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ _ w -> uvec3 w w w
+ src/Geomancy/Swizzle/UVec/Extend.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.UVec.Extend () where++import GHC.Records (HasField(..))++import Geomancy.UVec2 (UVec2, withUVec2)+import Geomancy.UVec3 (UVec3, uvec3, withUVec3)+import Geomancy.UVec4 (UVec4, uvec4)++instance HasField "xy0" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 x y 0++instance HasField "xy1" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 x y 1++instance HasField "xy00" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y 0 0++instance HasField "xy01" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y 0 1++instance HasField "xy10" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y 1 0++instance HasField "xy11" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y 1 1++instance HasField "xyz0" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y z 0++instance HasField "xyz1" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y z 1
+ src/Geomancy/Swizzle/UVec/Shuffle.hs view
@@ -0,0 +1,1161 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.UVec.Shuffle () where++import GHC.Records (HasField(..))++import Geomancy.UVec2 (UVec2, uvec2, withUVec2)+import Geomancy.UVec3 (UVec3, uvec3, withUVec3)+import Geomancy.UVec4 (UVec4, uvec4, withUVec4)++instance HasField "xx" UVec2 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x _ -> uvec2 x x++instance HasField "xy" UVec2 UVec2 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "yx" UVec2 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec2 y x++instance HasField "yy" UVec2 UVec2 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \_ y -> uvec2 y y++instance HasField "xxx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ _ -> uvec3 x x x++instance HasField "xxy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec3 x x y++instance HasField "xxz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec3 x x z++instance HasField "xyx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec3 x y x++instance HasField "xyy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec3 x y y++instance HasField "xyz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xzx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec3 x z x++instance HasField "xzy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec3 x z y++instance HasField "xzz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec3 x z z++instance HasField "yxx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec3 y x x++instance HasField "yxy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec3 y x y++instance HasField "yxz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec3 y x z++instance HasField "yyx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec3 y y x++instance HasField "yyy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y _ -> uvec3 y y y++instance HasField "yyz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec3 y y z++instance HasField "yzx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec3 y z x++instance HasField "yzy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec3 y z y++instance HasField "yzz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec3 y z z++instance HasField "zxx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec3 z x x++instance HasField "zxy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec3 z x y++instance HasField "zxz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec3 z x z++instance HasField "zyx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec3 z y x++instance HasField "zyy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec3 z y y++instance HasField "zyz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec3 z y z++instance HasField "zzx" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec3 z z x++instance HasField "zzy" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec3 z z y++instance HasField "zzz" UVec3 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ _ z -> uvec3 z z z++instance HasField "xxxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ _ -> uvec4 x x x x++instance HasField "xxxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x x x y++instance HasField "xxxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x x x z++instance HasField "xxxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x x x w++instance HasField "xxyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x x y x++instance HasField "xxyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x x y y++instance HasField "xxyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x x y z++instance HasField "xxyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x x y w++instance HasField "xxzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x x z x++instance HasField "xxzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x x z y++instance HasField "xxzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x x z z++instance HasField "xxzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x x z w++instance HasField "xxwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x x w x++instance HasField "xxwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x x w y++instance HasField "xxwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x x w z++instance HasField "xxww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x x w w++instance HasField "xyxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x y x x++instance HasField "xyxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x y x y++instance HasField "xyxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x y x z++instance HasField "xyxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x y x w++instance HasField "xyyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x y y x++instance HasField "xyyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 x y y y++instance HasField "xyyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x y y z++instance HasField "xyyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x y y w++instance HasField "xyzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x y z x++instance HasField "xyzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x y z y++instance HasField "xyzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x y z z++instance HasField "xyzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xywx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x y w x++instance HasField "xywy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x y w y++instance HasField "xywz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 x y w z++instance HasField "xyww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x y w w++instance HasField "xzxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x z x x++instance HasField "xzxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x z x y++instance HasField "xzxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x z x z++instance HasField "xzxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x z x w++instance HasField "xzyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x z y x++instance HasField "xzyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x z y y++instance HasField "xzyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x z y z++instance HasField "xzyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 x z y w++instance HasField "xzzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x z z x++instance HasField "xzzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 x z z y++instance HasField "xzzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 x z z z++instance HasField "xzzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x z z w++instance HasField "xzwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x z w x++instance HasField "xzwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 x z w y++instance HasField "xzwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x z w z++instance HasField "xzww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x z w w++instance HasField "xwxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x w x x++instance HasField "xwxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x w x y++instance HasField "xwxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x w x z++instance HasField "xwxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x w x w++instance HasField "xwyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x w y x++instance HasField "xwyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x w y y++instance HasField "xwyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 x w y z++instance HasField "xwyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x w y w++instance HasField "xwzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x w z x++instance HasField "xwzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 x w z y++instance HasField "xwzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x w z z++instance HasField "xwzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x w z w++instance HasField "xwwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x w w x++instance HasField "xwwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 x w w y++instance HasField "xwwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 x w w z++instance HasField "xwww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 x w w w++instance HasField "yxxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y x x x++instance HasField "yxxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y x x y++instance HasField "yxxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y x x z++instance HasField "yxxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y x x w++instance HasField "yxyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y x y x++instance HasField "yxyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y x y y++instance HasField "yxyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y x y z++instance HasField "yxyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y x y w++instance HasField "yxzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y x z x++instance HasField "yxzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y x z y++instance HasField "yxzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y x z z++instance HasField "yxzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 y x z w++instance HasField "yxwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y x w x++instance HasField "yxwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y x w y++instance HasField "yxwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 y x w z++instance HasField "yxww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y x w w++instance HasField "yyxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y y x x++instance HasField "yyxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y y x y++instance HasField "yyxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y y x z++instance HasField "yyxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y y x w++instance HasField "yyyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ _ -> uvec4 y y y x++instance HasField "yyyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ _ -> uvec4 y y y y++instance HasField "yyyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y y y z++instance HasField "yyyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y y y w++instance HasField "yyzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y y z x++instance HasField "yyzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y y z y++instance HasField "yyzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y y z z++instance HasField "yyzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y y z w++instance HasField "yywx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y y w x++instance HasField "yywy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y y w y++instance HasField "yywz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y y w z++instance HasField "yyww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y y w w++instance HasField "yzxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y z x x++instance HasField "yzxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y z x y++instance HasField "yzxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y z x z++instance HasField "yzxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 y z x w++instance HasField "yzyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y z y x++instance HasField "yzyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y z y y++instance HasField "yzyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y z y z++instance HasField "yzyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y z y w++instance HasField "yzzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 y z z x++instance HasField "yzzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y z z y++instance HasField "yzzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 y z z z++instance HasField "yzzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y z z w++instance HasField "yzwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 y z w x++instance HasField "yzwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y z w y++instance HasField "yzwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y z w z++instance HasField "yzww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y z w w++instance HasField "ywxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y w x x++instance HasField "ywxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y w x y++instance HasField "ywxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 y w x z++instance HasField "ywxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y w x w++instance HasField "ywyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y w y x++instance HasField "ywyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y w y y++instance HasField "ywyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y w y z++instance HasField "ywyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y w y w++instance HasField "ywzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 y w z x++instance HasField "ywzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y w z y++instance HasField "ywzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y w z z++instance HasField "ywzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y w z w++instance HasField "ywwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 y w w x++instance HasField "ywwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y w w y++instance HasField "ywwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 y w w z++instance HasField "ywww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 y w w w++instance HasField "zxxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z x x x++instance HasField "zxxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z x x y++instance HasField "zxxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z x x z++instance HasField "zxxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z x x w++instance HasField "zxyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z x y x++instance HasField "zxyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z x y y++instance HasField "zxyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z x y z++instance HasField "zxyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 z x y w++instance HasField "zxzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z x z x++instance HasField "zxzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z x z y++instance HasField "zxzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z x z z++instance HasField "zxzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z x z w++instance HasField "zxwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z x w x++instance HasField "zxwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 z x w y++instance HasField "zxwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z x w z++instance HasField "zxww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z x w w++instance HasField "zyxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z y x x++instance HasField "zyxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z y x y++instance HasField "zyxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z y x z++instance HasField "zyxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 z y x w++instance HasField "zyyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z y y x++instance HasField "zyyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z y y y++instance HasField "zyyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z y y z++instance HasField "zyyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z y y w++instance HasField "zyzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z y z x++instance HasField "zyzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z y z y++instance HasField "zyzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z y z z++instance HasField "zyzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z y z w++instance HasField "zywx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 z y w x++instance HasField "zywy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z y w y++instance HasField "zywz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z y w z++instance HasField "zyww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z y w w++instance HasField "zzxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z z x x++instance HasField "zzxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z z x y++instance HasField "zzxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z z x z++instance HasField "zzxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z z x w++instance HasField "zzyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z _ -> uvec4 z z y x++instance HasField "zzyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z z y y++instance HasField "zzyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z z y z++instance HasField "zzyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z z y w++instance HasField "zzzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z _ -> uvec4 z z z x++instance HasField "zzzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z _ -> uvec4 z z z y++instance HasField "zzzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z _ -> uvec4 z z z z++instance HasField "zzzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z z z w++instance HasField "zzwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z z w x++instance HasField "zzwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z z w y++instance HasField "zzwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z z w z++instance HasField "zzww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z z w w++instance HasField "zwxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z w x x++instance HasField "zwxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 z w x y++instance HasField "zwxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z w x z++instance HasField "zwxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z w x w++instance HasField "zwyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 z w y x++instance HasField "zwyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z w y y++instance HasField "zwyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z w y z++instance HasField "zwyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z w y w++instance HasField "zwzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z w z x++instance HasField "zwzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z w z y++instance HasField "zwzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z w z z++instance HasField "zwzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z w z w++instance HasField "zwwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 z w w x++instance HasField "zwwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 z w w y++instance HasField "zwwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z w w z++instance HasField "zwww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 z w w w++instance HasField "wxxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w x x x++instance HasField "wxxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w x x y++instance HasField "wxxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w x x z++instance HasField "wxxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w x x w++instance HasField "wxyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w x y x++instance HasField "wxyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w x y y++instance HasField "wxyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 w x y z++instance HasField "wxyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w x y w++instance HasField "wxzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w x z x++instance HasField "wxzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 w x z y++instance HasField "wxzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w x z z++instance HasField "wxzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w x z w++instance HasField "wxwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w x w x++instance HasField "wxwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w x w y++instance HasField "wxwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w x w z++instance HasField "wxww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w x w w++instance HasField "wyxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w y x x++instance HasField "wyxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w y x y++instance HasField "wyxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 w y x z++instance HasField "wyxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w y x w++instance HasField "wyyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w y y x++instance HasField "wyyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w y y y++instance HasField "wyyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w y y z++instance HasField "wyyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w y y w++instance HasField "wyzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 w y z x++instance HasField "wyzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w y z y++instance HasField "wyzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w y z z++instance HasField "wyzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w y z w++instance HasField "wywx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w y w x++instance HasField "wywy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w y w y++instance HasField "wywz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w y w z++instance HasField "wyww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w y w w++instance HasField "wzxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w z x x++instance HasField "wzxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 w z x y++instance HasField "wzxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w z x z++instance HasField "wzxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w z x w++instance HasField "wzyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y z w -> uvec4 w z y x++instance HasField "wzyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w z y y++instance HasField "wzyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w z y z++instance HasField "wzyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w z y w++instance HasField "wzzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w z z x++instance HasField "wzzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w z z y++instance HasField "wzzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w z z z++instance HasField "wzzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w z z w++instance HasField "wzwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w z w x++instance HasField "wzwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w z w y++instance HasField "wzwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w z w z++instance HasField "wzww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w z w w++instance HasField "wwxx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w w x x++instance HasField "wwxy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w w x y++instance HasField "wwxz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w w x z++instance HasField "wwxw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w w x w++instance HasField "wwyx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x y _ w -> uvec4 w w y x++instance HasField "wwyy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w w y y++instance HasField "wwyz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w w y z++instance HasField "wwyw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w w y w++instance HasField "wwzx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ z w -> uvec4 w w z x++instance HasField "wwzy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y z w -> uvec4 w w z y++instance HasField "wwzz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w w z z++instance HasField "wwzw" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w w z w++instance HasField "wwwx" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ w -> uvec4 w w w x++instance HasField "wwwy" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ w -> uvec4 w w w y++instance HasField "wwwz" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z w -> uvec4 w w w z++instance HasField "wwww" UVec4 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ _ w -> uvec4 w w w w
+ src/Geomancy/Swizzle/UVec/Up.hs view
@@ -0,0 +1,433 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.UVec.Up () where++import GHC.Records (HasField(..))++import Geomancy.UVec2 (UVec2, withUVec2)+import Geomancy.UVec3 (UVec3, uvec3, withUVec3)+import Geomancy.UVec4 (UVec4, uvec4)++instance HasField "xxx" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x _ -> uvec3 x x x++instance HasField "xxy" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 x x y++instance HasField "xyx" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 x y x++instance HasField "xyy" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 x y y++instance HasField "yxx" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 y x x++instance HasField "yxy" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 y x y++instance HasField "yyx" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec3 y y x++instance HasField "yyy" UVec2 UVec3 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \_ y -> uvec3 y y y++instance HasField "xxxx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x _ -> uvec4 x x x x++instance HasField "xxxy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x x x y++instance HasField "xxyx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x x y x++instance HasField "xxyy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x x y y++instance HasField "xyxx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y x x++instance HasField "xyxy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y x y++instance HasField "xyyx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y y x++instance HasField "xyyy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 x y y y++instance HasField "yxxx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y x x x++instance HasField "yxxy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y x x y++instance HasField "yxyx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y x y x++instance HasField "yxyy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y x y y++instance HasField "yyxx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y y x x++instance HasField "yyxy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y y x y++instance HasField "yyyx" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x y -> uvec4 y y y x++instance HasField "yyyy" UVec2 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \_ y -> uvec4 y y y y++instance HasField "xxxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ _ -> uvec4 x x x x++instance HasField "xxxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x x x y++instance HasField "xxxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x x x z++instance HasField "xxyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x x y x++instance HasField "xxyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x x y y++instance HasField "xxyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x x y z++instance HasField "xxzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x x z x++instance HasField "xxzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x x z y++instance HasField "xxzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x x z z++instance HasField "xyxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x y x x++instance HasField "xyxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x y x y++instance HasField "xyxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y x z++instance HasField "xyyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x y y x++instance HasField "xyyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 x y y y++instance HasField "xyyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y y z++instance HasField "xyzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y z x++instance HasField "xyzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y z y++instance HasField "xyzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x y z z++instance HasField "xzxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x z x x++instance HasField "xzxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x z x y++instance HasField "xzxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x z x z++instance HasField "xzyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x z y x++instance HasField "xzyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x z y y++instance HasField "xzyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x z y z++instance HasField "xzzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x z z x++instance HasField "xzzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 x z z y++instance HasField "xzzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 x z z z++instance HasField "yxxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y x x x++instance HasField "yxxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y x x y++instance HasField "yxxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y x x z++instance HasField "yxyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y x y x++instance HasField "yxyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y x y y++instance HasField "yxyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y x y z++instance HasField "yxzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y x z x++instance HasField "yxzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y x z y++instance HasField "yxzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y x z z++instance HasField "yyxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y y x x++instance HasField "yyxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y y x y++instance HasField "yyxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y y x z++instance HasField "yyyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y _ -> uvec4 y y y x++instance HasField "yyyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y _ -> uvec4 y y y y++instance HasField "yyyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y y y z++instance HasField "yyzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y y z x++instance HasField "yyzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y y z y++instance HasField "yyzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y y z z++instance HasField "yzxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y z x x++instance HasField "yzxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y z x y++instance HasField "yzxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y z x z++instance HasField "yzyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y z y x++instance HasField "yzyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y z y y++instance HasField "yzyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y z y z++instance HasField "yzzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 y z z x++instance HasField "yzzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y z z y++instance HasField "yzzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 y z z z++instance HasField "zxxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z x x x++instance HasField "zxxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z x x y++instance HasField "zxxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z x x z++instance HasField "zxyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z x y x++instance HasField "zxyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z x y y++instance HasField "zxyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z x y z++instance HasField "zxzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z x z x++instance HasField "zxzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z x z y++instance HasField "zxzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z x z z++instance HasField "zyxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z y x x++instance HasField "zyxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z y x y++instance HasField "zyxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z y x z++instance HasField "zyyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z y y x++instance HasField "zyyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z y y y++instance HasField "zyyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z y y z++instance HasField "zyzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z y z x++instance HasField "zyzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z y z y++instance HasField "zyzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z y z z++instance HasField "zzxx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z z x x++instance HasField "zzxy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z z x y++instance HasField "zzxz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z z x z++instance HasField "zzyx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x y z -> uvec4 z z y x++instance HasField "zzyy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z z y y++instance HasField "zzyz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z z y z++instance HasField "zzzx" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ z -> uvec4 z z z x++instance HasField "zzzy" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y z -> uvec4 z z z y++instance HasField "zzzz" UVec3 UVec4 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ _ z -> uvec4 z z z z
+ src/Geomancy/Swizzle/Vec/Down.hs view
@@ -0,0 +1,369 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.Vec.Down () where++import GHC.Records (HasField(..))++import Geomancy.Vec2 (Vec2, vec2)+import Geomancy.Vec3 (Vec3, vec3, withVec3)+import Geomancy.Vec4 (Vec4, withVec4)++instance HasField "xx" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ _ -> vec2 x x++instance HasField "xy" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec2 x y++instance HasField "xz" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec2 x z++instance HasField "yx" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec2 y x++instance HasField "yy" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y _ -> vec2 y y++instance HasField "yz" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec2 y z++instance HasField "zx" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec2 z x++instance HasField "zy" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec2 z y++instance HasField "zz" Vec3 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ _ z -> vec2 z z++instance HasField "xx" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ _ -> vec2 x x++instance HasField "xy" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec2 x y++instance HasField "xz" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec2 x z++instance HasField "xw" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec2 x w++instance HasField "yx" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec2 y x++instance HasField "yy" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ _ -> vec2 y y++instance HasField "yz" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec2 y z++instance HasField "yw" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec2 y w++instance HasField "zx" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec2 z x++instance HasField "zy" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec2 z y++instance HasField "zz" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z _ -> vec2 z z++instance HasField "zw" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec2 z w++instance HasField "wx" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec2 w x++instance HasField "wy" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec2 w y++instance HasField "wz" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec2 w z++instance HasField "ww" Vec4 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ _ w -> vec2 w w++instance HasField "xxx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ _ -> vec3 x x x++instance HasField "xxy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec3 x x y++instance HasField "xxz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec3 x x z++instance HasField "xxw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec3 x x w++instance HasField "xyx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec3 x y x++instance HasField "xyy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec3 x y y++instance HasField "xyz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec3 x y z++instance HasField "xyw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec3 x y w++instance HasField "xzx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec3 x z x++instance HasField "xzy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec3 x z y++instance HasField "xzz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec3 x z z++instance HasField "xzw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec3 x z w++instance HasField "xwx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec3 x w x++instance HasField "xwy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec3 x w y++instance HasField "xwz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec3 x w z++instance HasField "xww" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec3 x w w++instance HasField "yxx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec3 y x x++instance HasField "yxy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec3 y x y++instance HasField "yxz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec3 y x z++instance HasField "yxw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec3 y x w++instance HasField "yyx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec3 y y x++instance HasField "yyy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ _ -> vec3 y y y++instance HasField "yyz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec3 y y z++instance HasField "yyw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec3 y y w++instance HasField "yzx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec3 y z x++instance HasField "yzy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec3 y z y++instance HasField "yzz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec3 y z z++instance HasField "yzw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec3 y z w++instance HasField "ywx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec3 y w x++instance HasField "ywy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec3 y w y++instance HasField "ywz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec3 y w z++instance HasField "yww" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec3 y w w++instance HasField "zxx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec3 z x x++instance HasField "zxy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec3 z x y++instance HasField "zxz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec3 z x z++instance HasField "zxw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec3 z x w++instance HasField "zyx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec3 z y x++instance HasField "zyy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec3 z y y++instance HasField "zyz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec3 z y z++instance HasField "zyw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec3 z y w++instance HasField "zzx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec3 z z x++instance HasField "zzy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec3 z z y++instance HasField "zzz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z _ -> vec3 z z z++instance HasField "zzw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec3 z z w++instance HasField "zwx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec3 z w x++instance HasField "zwy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec3 z w y++instance HasField "zwz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec3 z w z++instance HasField "zww" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec3 z w w++instance HasField "wxx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec3 w x x++instance HasField "wxy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec3 w x y++instance HasField "wxz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec3 w x z++instance HasField "wxw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec3 w x w++instance HasField "wyx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec3 w y x++instance HasField "wyy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec3 w y y++instance HasField "wyz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec3 w y z++instance HasField "wyw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec3 w y w++instance HasField "wzx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec3 w z x++instance HasField "wzy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec3 w z y++instance HasField "wzz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec3 w z z++instance HasField "wzw" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec3 w z w++instance HasField "wwx" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec3 w w x++instance HasField "wwy" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec3 w w y++instance HasField "wwz" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec3 w w z++instance HasField "www" Vec4 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ _ w -> vec3 w w w
+ src/Geomancy/Swizzle/Vec/Extend.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.Vec.Extend () where++import GHC.Records (HasField(..))++import Geomancy.Vec2 (Vec2, withVec2)+import Geomancy.Vec3 (Vec3, vec3, withVec3)+import Geomancy.Vec4 (Vec4, vec4)++instance HasField "xy0" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 x y 0++instance HasField "xy1" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 x y 1++instance HasField "xy00" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y 0 0++instance HasField "xy01" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y 0 1++instance HasField "xy10" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y 1 0++instance HasField "xy11" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y 1 1++instance HasField "xyz0" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y z 0++instance HasField "xyz1" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y z 1
+ src/Geomancy/Swizzle/Vec/Shuffle.hs view
@@ -0,0 +1,1161 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.Vec.Shuffle () where++import GHC.Records (HasField(..))++import Geomancy.Vec2 (Vec2, vec2, withVec2)+import Geomancy.Vec3 (Vec3, vec3, withVec3)+import Geomancy.Vec4 (Vec4, vec4, withVec4)++instance HasField "xx" Vec2 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x _ -> vec2 x x++instance HasField "xy" Vec2 Vec2 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "yx" Vec2 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec2 y x++instance HasField "yy" Vec2 Vec2 where+ {-# INLINE getField #-}+ getField v = withVec2 v \_ y -> vec2 y y++instance HasField "xxx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ _ -> vec3 x x x++instance HasField "xxy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec3 x x y++instance HasField "xxz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec3 x x z++instance HasField "xyx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec3 x y x++instance HasField "xyy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec3 x y y++instance HasField "xyz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xzx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec3 x z x++instance HasField "xzy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec3 x z y++instance HasField "xzz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec3 x z z++instance HasField "yxx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec3 y x x++instance HasField "yxy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec3 y x y++instance HasField "yxz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec3 y x z++instance HasField "yyx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec3 y y x++instance HasField "yyy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y _ -> vec3 y y y++instance HasField "yyz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec3 y y z++instance HasField "yzx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec3 y z x++instance HasField "yzy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec3 y z y++instance HasField "yzz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec3 y z z++instance HasField "zxx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec3 z x x++instance HasField "zxy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec3 z x y++instance HasField "zxz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec3 z x z++instance HasField "zyx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec3 z y x++instance HasField "zyy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec3 z y y++instance HasField "zyz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec3 z y z++instance HasField "zzx" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec3 z z x++instance HasField "zzy" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec3 z z y++instance HasField "zzz" Vec3 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ _ z -> vec3 z z z++instance HasField "xxxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ _ -> vec4 x x x x++instance HasField "xxxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x x x y++instance HasField "xxxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x x x z++instance HasField "xxxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x x x w++instance HasField "xxyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x x y x++instance HasField "xxyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x x y y++instance HasField "xxyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x x y z++instance HasField "xxyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x x y w++instance HasField "xxzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x x z x++instance HasField "xxzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x x z y++instance HasField "xxzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x x z z++instance HasField "xxzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x x z w++instance HasField "xxwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x x w x++instance HasField "xxwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x x w y++instance HasField "xxwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x x w z++instance HasField "xxww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x x w w++instance HasField "xyxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x y x x++instance HasField "xyxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x y x y++instance HasField "xyxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x y x z++instance HasField "xyxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x y x w++instance HasField "xyyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x y y x++instance HasField "xyyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 x y y y++instance HasField "xyyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x y y z++instance HasField "xyyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x y y w++instance HasField "xyzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x y z x++instance HasField "xyzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x y z y++instance HasField "xyzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x y z z++instance HasField "xyzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = v++instance HasField "xywx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x y w x++instance HasField "xywy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x y w y++instance HasField "xywz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 x y w z++instance HasField "xyww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x y w w++instance HasField "xzxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x z x x++instance HasField "xzxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x z x y++instance HasField "xzxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x z x z++instance HasField "xzxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x z x w++instance HasField "xzyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x z y x++instance HasField "xzyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x z y y++instance HasField "xzyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x z y z++instance HasField "xzyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 x z y w++instance HasField "xzzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x z z x++instance HasField "xzzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 x z z y++instance HasField "xzzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 x z z z++instance HasField "xzzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x z z w++instance HasField "xzwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x z w x++instance HasField "xzwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 x z w y++instance HasField "xzwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x z w z++instance HasField "xzww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x z w w++instance HasField "xwxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x w x x++instance HasField "xwxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x w x y++instance HasField "xwxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x w x z++instance HasField "xwxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x w x w++instance HasField "xwyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x w y x++instance HasField "xwyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x w y y++instance HasField "xwyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 x w y z++instance HasField "xwyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x w y w++instance HasField "xwzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x w z x++instance HasField "xwzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 x w z y++instance HasField "xwzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x w z z++instance HasField "xwzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x w z w++instance HasField "xwwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x w w x++instance HasField "xwwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 x w w y++instance HasField "xwwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 x w w z++instance HasField "xwww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 x w w w++instance HasField "yxxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y x x x++instance HasField "yxxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y x x y++instance HasField "yxxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y x x z++instance HasField "yxxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y x x w++instance HasField "yxyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y x y x++instance HasField "yxyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y x y y++instance HasField "yxyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y x y z++instance HasField "yxyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y x y w++instance HasField "yxzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y x z x++instance HasField "yxzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y x z y++instance HasField "yxzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y x z z++instance HasField "yxzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 y x z w++instance HasField "yxwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y x w x++instance HasField "yxwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y x w y++instance HasField "yxwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 y x w z++instance HasField "yxww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y x w w++instance HasField "yyxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y y x x++instance HasField "yyxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y y x y++instance HasField "yyxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y y x z++instance HasField "yyxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y y x w++instance HasField "yyyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ _ -> vec4 y y y x++instance HasField "yyyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ _ -> vec4 y y y y++instance HasField "yyyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y y y z++instance HasField "yyyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y y y w++instance HasField "yyzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y y z x++instance HasField "yyzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y y z y++instance HasField "yyzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y y z z++instance HasField "yyzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y y z w++instance HasField "yywx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y y w x++instance HasField "yywy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y y w y++instance HasField "yywz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y y w z++instance HasField "yyww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y y w w++instance HasField "yzxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y z x x++instance HasField "yzxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y z x y++instance HasField "yzxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y z x z++instance HasField "yzxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 y z x w++instance HasField "yzyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y z y x++instance HasField "yzyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y z y y++instance HasField "yzyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y z y z++instance HasField "yzyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y z y w++instance HasField "yzzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 y z z x++instance HasField "yzzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y z z y++instance HasField "yzzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 y z z z++instance HasField "yzzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y z z w++instance HasField "yzwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 y z w x++instance HasField "yzwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y z w y++instance HasField "yzwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y z w z++instance HasField "yzww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y z w w++instance HasField "ywxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y w x x++instance HasField "ywxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y w x y++instance HasField "ywxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 y w x z++instance HasField "ywxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y w x w++instance HasField "ywyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y w y x++instance HasField "ywyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y w y y++instance HasField "ywyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y w y z++instance HasField "ywyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y w y w++instance HasField "ywzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 y w z x++instance HasField "ywzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y w z y++instance HasField "ywzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y w z z++instance HasField "ywzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y w z w++instance HasField "ywwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 y w w x++instance HasField "ywwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y w w y++instance HasField "ywwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 y w w z++instance HasField "ywww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 y w w w++instance HasField "zxxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z x x x++instance HasField "zxxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z x x y++instance HasField "zxxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z x x z++instance HasField "zxxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z x x w++instance HasField "zxyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z x y x++instance HasField "zxyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z x y y++instance HasField "zxyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z x y z++instance HasField "zxyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 z x y w++instance HasField "zxzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z x z x++instance HasField "zxzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z x z y++instance HasField "zxzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z x z z++instance HasField "zxzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z x z w++instance HasField "zxwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z x w x++instance HasField "zxwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 z x w y++instance HasField "zxwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z x w z++instance HasField "zxww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z x w w++instance HasField "zyxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z y x x++instance HasField "zyxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z y x y++instance HasField "zyxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z y x z++instance HasField "zyxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 z y x w++instance HasField "zyyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z y y x++instance HasField "zyyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z y y y++instance HasField "zyyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z y y z++instance HasField "zyyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z y y w++instance HasField "zyzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z y z x++instance HasField "zyzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z y z y++instance HasField "zyzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z y z z++instance HasField "zyzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z y z w++instance HasField "zywx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 z y w x++instance HasField "zywy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z y w y++instance HasField "zywz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z y w z++instance HasField "zyww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z y w w++instance HasField "zzxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z z x x++instance HasField "zzxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z z x y++instance HasField "zzxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z z x z++instance HasField "zzxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z z x w++instance HasField "zzyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z _ -> vec4 z z y x++instance HasField "zzyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z z y y++instance HasField "zzyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z z y z++instance HasField "zzyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z z y w++instance HasField "zzzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z _ -> vec4 z z z x++instance HasField "zzzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z _ -> vec4 z z z y++instance HasField "zzzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z _ -> vec4 z z z z++instance HasField "zzzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z z z w++instance HasField "zzwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z z w x++instance HasField "zzwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z z w y++instance HasField "zzwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z z w z++instance HasField "zzww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z z w w++instance HasField "zwxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z w x x++instance HasField "zwxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 z w x y++instance HasField "zwxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z w x z++instance HasField "zwxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z w x w++instance HasField "zwyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 z w y x++instance HasField "zwyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z w y y++instance HasField "zwyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z w y z++instance HasField "zwyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z w y w++instance HasField "zwzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z w z x++instance HasField "zwzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z w z y++instance HasField "zwzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z w z z++instance HasField "zwzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z w z w++instance HasField "zwwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 z w w x++instance HasField "zwwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 z w w y++instance HasField "zwwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z w w z++instance HasField "zwww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 z w w w++instance HasField "wxxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w x x x++instance HasField "wxxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w x x y++instance HasField "wxxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w x x z++instance HasField "wxxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w x x w++instance HasField "wxyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w x y x++instance HasField "wxyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w x y y++instance HasField "wxyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 w x y z++instance HasField "wxyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w x y w++instance HasField "wxzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w x z x++instance HasField "wxzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 w x z y++instance HasField "wxzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w x z z++instance HasField "wxzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w x z w++instance HasField "wxwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w x w x++instance HasField "wxwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w x w y++instance HasField "wxwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w x w z++instance HasField "wxww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w x w w++instance HasField "wyxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w y x x++instance HasField "wyxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w y x y++instance HasField "wyxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 w y x z++instance HasField "wyxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w y x w++instance HasField "wyyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w y y x++instance HasField "wyyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w y y y++instance HasField "wyyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w y y z++instance HasField "wyyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w y y w++instance HasField "wyzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 w y z x++instance HasField "wyzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w y z y++instance HasField "wyzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w y z z++instance HasField "wyzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w y z w++instance HasField "wywx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w y w x++instance HasField "wywy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w y w y++instance HasField "wywz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w y w z++instance HasField "wyww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w y w w++instance HasField "wzxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w z x x++instance HasField "wzxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 w z x y++instance HasField "wzxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w z x z++instance HasField "wzxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w z x w++instance HasField "wzyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y z w -> vec4 w z y x++instance HasField "wzyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w z y y++instance HasField "wzyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w z y z++instance HasField "wzyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w z y w++instance HasField "wzzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w z z x++instance HasField "wzzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w z z y++instance HasField "wzzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w z z z++instance HasField "wzzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w z z w++instance HasField "wzwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w z w x++instance HasField "wzwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w z w y++instance HasField "wzwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w z w z++instance HasField "wzww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w z w w++instance HasField "wwxx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w w x x++instance HasField "wwxy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w w x y++instance HasField "wwxz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w w x z++instance HasField "wwxw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w w x w++instance HasField "wwyx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x y _ w -> vec4 w w y x++instance HasField "wwyy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w w y y++instance HasField "wwyz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w w y z++instance HasField "wwyw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w w y w++instance HasField "wwzx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ z w -> vec4 w w z x++instance HasField "wwzy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y z w -> vec4 w w z y++instance HasField "wwzz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w w z z++instance HasField "wwzw" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w w z w++instance HasField "wwwx" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ w -> vec4 w w w x++instance HasField "wwwy" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ w -> vec4 w w w y++instance HasField "wwwz" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z w -> vec4 w w w z++instance HasField "wwww" Vec4 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ _ w -> vec4 w w w w
+ src/Geomancy/Swizzle/Vec/Up.hs view
@@ -0,0 +1,433 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Geomancy.Swizzle.Vec.Up () where++import GHC.Records (HasField(..))++import Geomancy.Vec2 (Vec2, withVec2)+import Geomancy.Vec3 (Vec3, vec3, withVec3)+import Geomancy.Vec4 (Vec4, vec4)++instance HasField "xxx" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x _ -> vec3 x x x++instance HasField "xxy" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 x x y++instance HasField "xyx" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 x y x++instance HasField "xyy" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 x y y++instance HasField "yxx" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 y x x++instance HasField "yxy" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 y x y++instance HasField "yyx" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec3 y y x++instance HasField "yyy" Vec2 Vec3 where+ {-# INLINE getField #-}+ getField v = withVec2 v \_ y -> vec3 y y y++instance HasField "xxxx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x _ -> vec4 x x x x++instance HasField "xxxy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x x x y++instance HasField "xxyx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x x y x++instance HasField "xxyy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x x y y++instance HasField "xyxx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y x x++instance HasField "xyxy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y x y++instance HasField "xyyx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y y x++instance HasField "xyyy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 x y y y++instance HasField "yxxx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y x x x++instance HasField "yxxy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y x x y++instance HasField "yxyx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y x y x++instance HasField "yxyy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y x y y++instance HasField "yyxx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y y x x++instance HasField "yyxy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y y x y++instance HasField "yyyx" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \x y -> vec4 y y y x++instance HasField "yyyy" Vec2 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec2 v \_ y -> vec4 y y y y++instance HasField "xxxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ _ -> vec4 x x x x++instance HasField "xxxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x x x y++instance HasField "xxxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x x x z++instance HasField "xxyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x x y x++instance HasField "xxyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x x y y++instance HasField "xxyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x x y z++instance HasField "xxzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x x z x++instance HasField "xxzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x x z y++instance HasField "xxzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x x z z++instance HasField "xyxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x y x x++instance HasField "xyxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x y x y++instance HasField "xyxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y x z++instance HasField "xyyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x y y x++instance HasField "xyyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 x y y y++instance HasField "xyyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y y z++instance HasField "xyzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y z x++instance HasField "xyzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y z y++instance HasField "xyzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x y z z++instance HasField "xzxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x z x x++instance HasField "xzxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x z x y++instance HasField "xzxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x z x z++instance HasField "xzyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x z y x++instance HasField "xzyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x z y y++instance HasField "xzyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x z y z++instance HasField "xzzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x z z x++instance HasField "xzzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 x z z y++instance HasField "xzzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 x z z z++instance HasField "yxxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y x x x++instance HasField "yxxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y x x y++instance HasField "yxxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y x x z++instance HasField "yxyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y x y x++instance HasField "yxyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y x y y++instance HasField "yxyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y x y z++instance HasField "yxzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y x z x++instance HasField "yxzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y x z y++instance HasField "yxzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y x z z++instance HasField "yyxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y y x x++instance HasField "yyxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y y x y++instance HasField "yyxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y y x z++instance HasField "yyyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y _ -> vec4 y y y x++instance HasField "yyyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y _ -> vec4 y y y y++instance HasField "yyyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y y y z++instance HasField "yyzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y y z x++instance HasField "yyzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y y z y++instance HasField "yyzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y y z z++instance HasField "yzxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y z x x++instance HasField "yzxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y z x y++instance HasField "yzxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y z x z++instance HasField "yzyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y z y x++instance HasField "yzyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y z y y++instance HasField "yzyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y z y z++instance HasField "yzzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 y z z x++instance HasField "yzzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y z z y++instance HasField "yzzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 y z z z++instance HasField "zxxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z x x x++instance HasField "zxxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z x x y++instance HasField "zxxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z x x z++instance HasField "zxyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z x y x++instance HasField "zxyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z x y y++instance HasField "zxyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z x y z++instance HasField "zxzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z x z x++instance HasField "zxzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z x z y++instance HasField "zxzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z x z z++instance HasField "zyxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z y x x++instance HasField "zyxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z y x y++instance HasField "zyxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z y x z++instance HasField "zyyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z y y x++instance HasField "zyyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z y y y++instance HasField "zyyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z y y z++instance HasField "zyzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z y z x++instance HasField "zyzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z y z y++instance HasField "zyzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z y z z++instance HasField "zzxx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z z x x++instance HasField "zzxy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z z x y++instance HasField "zzxz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z z x z++instance HasField "zzyx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x y z -> vec4 z z y x++instance HasField "zzyy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z z y y++instance HasField "zzyz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z z y z++instance HasField "zzzx" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ z -> vec4 z z z x++instance HasField "zzzy" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y z -> vec4 z z z y++instance HasField "zzzz" Vec3 Vec4 where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ _ z -> vec4 z z z z
src/Geomancy/Transform.hs view
@@ -57,7 +57,7 @@ import Graphics.Gl.Block (Block(..)) newtype Transform = Transform { unTransform :: Mat4 }- deriving newtype (Show, Semigroup, Monoid, Storable)+ deriving newtype (Eq, Show, Semigroup, Monoid, Storable) #ifdef TH_LIFT deriving Lift #endif
+ src/Geomancy/U64Vec2.hs view
@@ -0,0 +1,255 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif+++module Geomancy.U64Vec2+ ( U64Vec2+ , u64vec2+ , withU64Vec2+ , pattern WithU64Vec2+ , convert+ , fromTuple+ , dot+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Data.Word (Word64)+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Ix (Ix(..))+import GHC.Records (HasField(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))++data U64Vec2 = U64Vec2+ {-# UNPACK #-} !Word64+ {-# UNPACK #-} !Word64+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE u64vec2 #-}+u64vec2 :: Word64 -> Word64 -> U64Vec2+u64vec2 = U64Vec2++{-# INLINE withU64Vec2 #-}+withU64Vec2+ :: U64Vec2+ -> (Word64 -> Word64 -> r)+ -> r+withU64Vec2 (U64Vec2 a b) f = f a b++pattern WithU64Vec2 :: Word64 -> Word64 -> U64Vec2+pattern WithU64Vec2 a b <- ((`withU64Vec2` (,)) -> (a, b))+{-# COMPLETE WithU64Vec2 #-}++instance HasField "x" U64Vec2 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \x _ -> x++instance HasField "y" U64Vec2 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec2 v \_ y -> y++{-# INLINE convert #-}+convert :: Coercible v U64Vec2 => (Word64 -> a) -> (a -> a -> r) -> v -> r+convert f t v =+ withU64Vec2 (coerce v) \a b ->+ t (f a) (f b)++{-# INLINE fromTuple #-}+fromTuple :: (Word64, Word64) -> U64Vec2+fromTuple (x, y) = u64vec2 x y++instance NFData U64Vec2 where+ rnf U64Vec2{} = ()++type instance Element U64Vec2 = Word64++instance MonoFunctor U64Vec2 where+ {-# INLINE omap #-}+ omap f v =+ withU64Vec2 v \x y ->+ u64vec2 (f x) (f y)++instance MonoPointed U64Vec2 where+ {-# INLINE opoint #-}+ opoint x = u64vec2 x x++instance Elementwise U64Vec2 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withU64Vec2 p0 \x0 y0 ->+ withU64Vec2 p1 \x1 y1 ->+ u64vec2+ (f x0 x1)+ (f y0 y1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withU64Vec2 p0 \x0 y0 ->+ withU64Vec2 p1 \x1 y1 ->+ withU64Vec2 p2 \x2 y2 ->+ u64vec2+ (f x0 x1 x2)+ (f y0 y1 y2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withU64Vec2 p0 \x0 y0 ->+ withU64Vec2 p1 \x1 y1 ->+ withU64Vec2 p2 \x2 y2 ->+ withU64Vec2 p3 \x3 y3 ->+ u64vec2+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withU64Vec2 p0 \x0 y0 ->+ withU64Vec2 p1 \x1 y1 ->+ withU64Vec2 p2 \x2 y2 ->+ withU64Vec2 p3 \x3 y3 ->+ withU64Vec2 p4 \x4 y4 ->+ u64vec2+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)++instance Num U64Vec2 where+ {-# INLINE (+) #-}+ U64Vec2 l1 l2 + U64Vec2 r1 r2 =+ U64Vec2+ (l1 + r1)+ (l2 + r2)++ {-# INLINE (-) #-}+ U64Vec2 l1 l2 - U64Vec2 r1 r2 =+ U64Vec2+ (l1 - r1)+ (l2 - r2)++ {-# INLINE (*) #-}+ U64Vec2 l1 l2 * U64Vec2 r1 r2 =+ U64Vec2+ (l1 * r1)+ (l2 * r2)++ {-# INLINE abs #-}+ abs (U64Vec2 a b) =+ U64Vec2 (abs a) (abs b)++ {-# INLINE signum #-}+ signum v2 = withU64Vec2 v2 \a b ->+ u64vec2 (signum a) (signum b)++ {-# INLINE fromInteger #-}+ fromInteger x = U64Vec2 x' x'+ where+ x' = fromInteger x++{-# INLINE dot #-}+dot :: U64Vec2 -> U64Vec2 -> Word64+dot (U64Vec2 l1 l2) (U64Vec2 r1 r2) =+ l1 * r1 + l2 * r2++instance Storable U64Vec2 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 16++ {-# INLINE alignment #-}+ alignment _ = 16++ {-# INLINE poke #-}+ poke ptr v4 =+ withU64Vec2 v4 \a b -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b++ {-# INLINE peek #-}+ peek ptr = u64vec2+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8++instance Block U64Vec2 where+ type PackedSize U64Vec2 = 16+ alignment140 _ = 16+ sizeOf140 _ = 16+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Ix U64Vec2 where+ {-# INLINE range #-}+ range (l, u) =+ withU64Vec2 l \l1 l2 ->+ withU64Vec2 u \u1 u2 ->+ u64vec2+ <$> range (l1, u1)+ <*> range (l2, u2)++ {-# INLINE unsafeIndex #-}+ unsafeIndex (l, u) i =+ withU64Vec2 l \l1 l2 ->+ withU64Vec2 u \u1 u2 ->+ withU64Vec2 i \i1 i2 ->+ unsafeIndex (l2, u2) i2 + unsafeRangeSize (l2, u2) *+ unsafeIndex (l1, u1) i1++ {-# INLINE inRange #-}+ inRange (l, u) i =+ withU64Vec2 l \l1 l2 ->+ withU64Vec2 u \u1 u2 ->+ withU64Vec2 i \i1 i2 ->+ inRange (l1, u1) i1 &&+ inRange (l2, u2) i2++#ifdef SERIALISE+instance Serialise U64Vec2 where+ encode v = withU64Vec2 v \x y ->+ Serialise.encodeListLen 2 <> encode x <> encode y+ decode =+ Serialise.decodeListLenOf 2 *> (u64vec2 <$> decode <*> decode)+#endif
+ src/Geomancy/U64Vec3.hs view
@@ -0,0 +1,349 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif+++module Geomancy.U64Vec3+ ( U64Vec3+ , u64vec3+ , withU64Vec3+ , pattern WithU64Vec3+ , convert+ , fromTuple+ , dot++ , Packed(..)+ , packed+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Data.Word (Word64)+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Ix (Ix(..))+import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..))+import WebColor.Labels (IsWebColor(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))++data U64Vec3 = U64Vec3+ {-# UNPACK #-} !Word64+ {-# UNPACK #-} !Word64+ {-# UNPACK #-} !Word64+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE u64vec3 #-}+u64vec3 :: Word64 -> Word64 -> Word64 -> U64Vec3+u64vec3 = U64Vec3++{-# INLINE withU64Vec3 #-}+withU64Vec3+ :: U64Vec3+ -> (Word64 -> Word64 -> Word64 -> r)+ -> r+withU64Vec3 (U64Vec3 a b c) f = f a b c++pattern WithU64Vec3 :: Word64 -> Word64 -> Word64 -> U64Vec3+pattern WithU64Vec3 a b c <- ((`withU64Vec3` (,,)) -> (a, b, c))+{-# COMPLETE WithU64Vec3 #-}++instance HasField "x" U64Vec3 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \x _ _ -> x++instance HasField "y" U64Vec3 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ y _ -> y++instance HasField "z" U64Vec3 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec3 v \_ _ z -> z++{-# INLINE convert #-}+convert :: Coercible v U64Vec3 => (Word64 -> a) -> (a -> a -> a -> r) -> v -> r+convert f t v =+ withU64Vec3 (coerce v) \a b c ->+ t (f a) (f b) (f c)++{-# INLINE fromTuple #-}+fromTuple :: (Word64, Word64, Word64) -> U64Vec3+fromTuple (a, b, c) = u64vec3 a b c++{-# INLINE dot #-}+dot :: U64Vec3 -> U64Vec3 -> Word64+dot (U64Vec3 l1 l2 l3) (U64Vec3 r1 r2 r3) =+ l1 * r1 + l2 * r2 + l3 * r3++instance IsWebColor s => IsLabel s U64Vec3 where+ {-# INLINE fromLabel #-}+ fromLabel =+ webColor @s \r g b ->+ u64vec3 (fromIntegral r) (fromIntegral g) (fromIntegral b)++instance NFData U64Vec3 where+ rnf U64Vec3{} = ()++type instance Element U64Vec3 = Word64++instance MonoFunctor U64Vec3 where+ {-# INLINE omap #-}+ omap f v =+ withU64Vec3 v \x y z ->+ u64vec3 (f x) (f y) (f z)++instance MonoPointed U64Vec3 where+ {-# INLINE opoint #-}+ opoint x = u64vec3 x x x++instance Elementwise U64Vec3 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withU64Vec3 p0 \x0 y0 z0 ->+ withU64Vec3 p1 \x1 y1 z1 ->+ u64vec3+ (f x0 x1)+ (f y0 y1)+ (f z0 z1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withU64Vec3 p0 \x0 y0 z0 ->+ withU64Vec3 p1 \x1 y1 z1 ->+ withU64Vec3 p2 \x2 y2 z2 ->+ u64vec3+ (f x0 x1 x2)+ (f y0 y1 y2)+ (f z0 z1 z2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withU64Vec3 p0 \x0 y0 z0 ->+ withU64Vec3 p1 \x1 y1 z1 ->+ withU64Vec3 p2 \x2 y2 z2 ->+ withU64Vec3 p3 \x3 y3 z3 ->+ u64vec3+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)+ (f z0 z1 z2 z3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withU64Vec3 p0 \x0 y0 z0 ->+ withU64Vec3 p1 \x1 y1 z1 ->+ withU64Vec3 p2 \x2 y2 z2 ->+ withU64Vec3 p3 \x3 y3 z3 ->+ withU64Vec3 p4 \x4 y4 z4 ->+ u64vec3+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)+ (f z0 z1 z2 z3 z4)++instance Num U64Vec3 where+ {-# INLINE (+) #-}+ U64Vec3 l1 l2 l3 + U64Vec3 r1 r2 r3 =+ U64Vec3+ (l1 + r1)+ (l2 + r2)+ (l3 + r3)++ {-# INLINE (-) #-}+ U64Vec3 l1 l2 l3 - U64Vec3 r1 r2 r3 =+ U64Vec3+ (l1 - r1)+ (l2 - r2)+ (l3 - r3)++ {-# INLINE (*) #-}+ U64Vec3 l1 l2 l3 * U64Vec3 r1 r2 r3 =+ U64Vec3+ (l1 * r1)+ (l2 * r2)+ (l3 * r3)++ {-# INLINE abs #-}+ abs x = x++ {-# INLINE signum #-}+ signum v3 = withU64Vec3 v3 \a b c ->+ u64vec3 (signum a) (signum b) (signum c)++ {-# INLINE fromInteger #-}+ fromInteger x = U64Vec3 x' x' x'+ where+ x' = fromInteger x++instance Storable U64Vec3 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr v3 =+ withU64Vec3 v3 \a b c -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b+ pokeByteOff ptr 16 c++ {-# INLINE peek #-}+ peek ptr = u64vec3+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8+ <*> peekByteOff ptr 16++newtype Packed = Packed { unPacked :: U64Vec3 }+ deriving (Eq, Ord, Show, NFData, Num)++{-# INLINE packed #-}+packed :: Word64 -> Word64 -> Word64 -> Packed+packed a b c = Packed (u64vec3 a b c)++instance HasField "x" Packed Word64 where+ {-# INLINE getField #-}+ getField (Packed v) = withU64Vec3 v \x _ _ -> x++instance HasField "y" Packed Word64 where+ {-# INLINE getField #-}+ getField (Packed v) = withU64Vec3 v \_ y _ -> y++instance HasField "z" Packed Word64 where+ {-# INLINE getField #-}+ getField (Packed v) = withU64Vec3 v \_ _ z -> z++instance Storable Packed where+ {-# INLINE sizeOf #-}+ sizeOf _ = 24++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr (Packed v3) =+ withU64Vec3 v3 \a b c -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b+ pokeByteOff ptr 16 c++ {-# INLINE peek #-}+ peek ptr = packed+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8+ <*> peekByteOff ptr 16++instance Block U64Vec3 where+ type PackedSize U64Vec3 = 24+ alignment140 _ = 32+ sizeOf140 _ = 32+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Block Packed where+ type PackedSize Packed = 24+ alignment140 _ = 32+ sizeOf140 _ = 24+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Ix U64Vec3 where+ {-# INLINE range #-}+ range (l, u) =+ withU64Vec3 l \l1 l2 l3 ->+ withU64Vec3 u \u1 u2 u3 ->+ u64vec3+ <$> range (l1, u1)+ <*> range (l2, u2)+ <*> range (l3, u3)++ {-# INLINE unsafeIndex #-}+ unsafeIndex (l, u) i =+ withU64Vec3 l \l1 l2 l3 ->+ withU64Vec3 u \u1 u2 u3 ->+ withU64Vec3 i \i1 i2 i3 ->+ unsafeIndex (l3, u3) i3 + unsafeRangeSize (l3, u3) * (+ unsafeIndex (l2, u2) i2 + unsafeRangeSize (l2, u2) * (+ unsafeIndex (l1, u1) i1))++ {-# INLINE inRange #-}+ inRange (l, u) i =+ withU64Vec3 l \l1 l2 l3 ->+ withU64Vec3 u \u1 u2 u3 ->+ withU64Vec3 i \i1 i2 i3 ->+ inRange (l1, u1) i1 &&+ inRange (l2, u2) i2 &&+ inRange (l3, u3) i3++#ifdef SERIALISE+instance Serialise U64Vec3 where+ encode v = withU64Vec3 v \x y z ->+ Serialise.encodeListLen 3 <> encode x <> encode y <> encode z+ decode =+ Serialise.decodeListLenOf 3 *> (u64vec3 <$> decode <*> decode <*> decode)+#endif
+ src/Geomancy/U64Vec4.hs view
@@ -0,0 +1,288 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++#ifdef TH_LIFT+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DerivingStrategies #-}+#endif+++module Geomancy.U64Vec4+ ( U64Vec4+ , u64vec4+ , withU64Vec4+ , pattern WithU64Vec4+ , convert+ , fromTuple+ , dot+ ) where++import Control.DeepSeq (NFData(rnf))+import Data.Coerce (Coercible, coerce)+import Data.MonoTraversable (Element, MonoFunctor(..), MonoPointed(..))+import Data.Word (Word64)+import Foreign (Storable(..))+import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Ix (Ix(..))+import GHC.Records (HasField(..))++#ifdef TH_LIFT+import Language.Haskell.TH.Syntax (Lift)+#endif++#ifdef SERIALISE+import Codec.Serialise (Serialise(..))+import qualified Codec.Serialise.Encoding as Serialise+import qualified Codec.Serialise.Decoding as Serialise+#endif++import Geomancy.Elementwise (Elementwise(..))+import Graphics.Gl.Block (Block(..))++data U64Vec4 = U64Vec4+ {-# UNPACK #-} !Word64+ {-# UNPACK #-} !Word64+ {-# UNPACK #-} !Word64+ {-# UNPACK #-} !Word64+ deriving (Eq, Ord, Show)+#ifdef TH_LIFT+ deriving Lift+#endif++{-# INLINE u64vec4 #-}+u64vec4 :: Word64 -> Word64 -> Word64 -> Word64 -> U64Vec4+u64vec4 = U64Vec4++{-# INLINE withU64Vec4 #-}+withU64Vec4+ :: U64Vec4+ -> (Word64 -> Word64 -> Word64 -> Word64 -> r)+ -> r+withU64Vec4 (U64Vec4 a b c d) f = f a b c d++pattern WithU64Vec4 :: Word64 -> Word64 -> Word64 -> Word64 -> U64Vec4+pattern WithU64Vec4 a b c d <- ((`withU64Vec4` (,,,)) -> (a, b, c, d))+{-# COMPLETE WithU64Vec4 #-}++instance HasField "x" U64Vec4 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \x _ _ _ -> x++instance HasField "y" U64Vec4 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ y _ _ -> y++instance HasField "z" U64Vec4 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ z _ -> z++instance HasField "w" U64Vec4 Word64 where+ {-# INLINE getField #-}+ getField v = withU64Vec4 v \_ _ _ w -> w++{-# INLINE convert #-}+convert :: Coercible v U64Vec4 => (Word64 -> a) -> (a -> a -> a -> a -> r) -> v -> r+convert f t v =+ withU64Vec4 (coerce v) \a b c d ->+ t (f a) (f b) (f c) (f d)++{-# INLINE fromTuple #-}+fromTuple :: (Word64, Word64, Word64, Word64) -> U64Vec4+fromTuple (x, y, z, w) = u64vec4 x y z w++instance NFData U64Vec4 where+ rnf U64Vec4{} = ()++type instance Element U64Vec4 = Word64++instance MonoFunctor U64Vec4 where+ {-# INLINE omap #-}+ omap f v =+ withU64Vec4 v \x y z w ->+ u64vec4 (f x) (f y) (f z) (f w)++instance MonoPointed U64Vec4 where+ {-# INLINE opoint #-}+ opoint x = u64vec4 x x x x++instance Elementwise U64Vec4 where+ {-# INLINE emap2 #-}+ emap2 f p0 p1 =+ withU64Vec4 p0 \x0 y0 z0 w0 ->+ withU64Vec4 p1 \x1 y1 z1 w1 ->+ u64vec4+ (f x0 x1)+ (f y0 y1)+ (f z0 z1)+ (f w0 w1)++ {-# INLINE emap3 #-}+ emap3 f p0 p1 p2 =+ withU64Vec4 p0 \x0 y0 z0 w0 ->+ withU64Vec4 p1 \x1 y1 z1 w1 ->+ withU64Vec4 p2 \x2 y2 z2 w2 ->+ u64vec4+ (f x0 x1 x2)+ (f y0 y1 y2)+ (f z0 z1 z2)+ (f w0 w1 w2)++ {-# INLINE emap4 #-}+ emap4 f p0 p1 p2 p3 =+ withU64Vec4 p0 \x0 y0 z0 w0 ->+ withU64Vec4 p1 \x1 y1 z1 w1 ->+ withU64Vec4 p2 \x2 y2 z2 w2 ->+ withU64Vec4 p3 \x3 y3 z3 w3 ->+ u64vec4+ (f x0 x1 x2 x3)+ (f y0 y1 y2 y3)+ (f z0 z1 z2 z3)+ (f w0 w1 w2 w3)++ {-# INLINE emap5 #-}+ emap5 f p0 p1 p2 p3 p4 =+ withU64Vec4 p0 \x0 y0 z0 w0 ->+ withU64Vec4 p1 \x1 y1 z1 w1 ->+ withU64Vec4 p2 \x2 y2 z2 w2 ->+ withU64Vec4 p3 \x3 y3 z3 w3 ->+ withU64Vec4 p4 \x4 y4 z4 w4 ->+ u64vec4+ (f x0 x1 x2 x3 x4)+ (f y0 y1 y2 y3 y4)+ (f z0 z1 z2 z3 z4)+ (f w0 w1 w2 w3 w4)++instance Num U64Vec4 where+ {-# INLINE (+) #-}+ U64Vec4 l1 l2 l3 l4 + U64Vec4 r1 r2 r3 r4 =+ U64Vec4+ (l1 + r1)+ (l2 + r2)+ (l3 + r3)+ (l4 + r4)++ {-# INLINE (-) #-}+ U64Vec4 l1 l2 l3 l4 - U64Vec4 r1 r2 r3 r4 =+ U64Vec4+ (l1 - r1)+ (l2 - r2)+ (l3 - r3)+ (l4 - r4)++ {-# INLINE (*) #-}+ U64Vec4 l1 l2 l3 l4 * U64Vec4 r1 r2 r3 r4 =+ U64Vec4+ (l1 * r1)+ (l2 * r2)+ (l3 * r3)+ (l4 * r4)++ {-# INLINE abs #-}+ abs x = x++ {-# INLINE signum #-}+ signum v4 = withU64Vec4 v4 \a b c d ->+ u64vec4 (signum a) (signum b) (signum c) (signum d)++ {-# INLINE fromInteger #-}+ fromInteger x = U64Vec4 x' x' x' x'+ where+ x' = fromInteger x++instance Storable U64Vec4 where+ {-# INLINE sizeOf #-}+ sizeOf _ = 32++ {-# INLINE alignment #-}+ alignment _ = 8++ {-# INLINE poke #-}+ poke ptr v4 =+ withU64Vec4 v4 \a b c d -> do+ pokeByteOff ptr 0 a+ pokeByteOff ptr 8 b+ pokeByteOff ptr 16 c+ pokeByteOff ptr 24 d++ {-# INLINE peek #-}+ peek ptr = u64vec4+ <$> peekByteOff ptr 0+ <*> peekByteOff ptr 8+ <*> peekByteOff ptr 16+ <*> peekByteOff ptr 24++instance Block U64Vec4 where+ type PackedSize U64Vec4 = 32+ alignment140 _ = 32+ sizeOf140 _ = 32+ alignment430 = alignment140+ sizeOf430 = sizeOf140+ isStruct _ = False+ read140 = peekDiffOff+ write140 = pokeDiffOff+ read430 = read140+ write430 = write140+ readPacked = read140+ writePacked = write140+ {-# INLINE alignment140 #-}+ {-# INLINE sizeOf140 #-}+ {-# INLINE alignment430 #-}+ {-# INLINE sizeOf430 #-}+ {-# INLINE isStruct #-}+ {-# INLINE read140 #-}+ {-# INLINE write140 #-}+ {-# INLINE read430 #-}+ {-# INLINE write430 #-}+ {-# INLINE readPacked #-}+ {-# INLINE writePacked #-}++instance Ix U64Vec4 where+ {-# INLINE range #-}+ range (l, u) =+ withU64Vec4 l \l1 l2 l3 l4 ->+ withU64Vec4 u \u1 u2 u3 u4 ->+ u64vec4+ <$> range (l1, u1)+ <*> range (l2, u2)+ <*> range (l3, u3)+ <*> range (l4, u4)++ {-# INLINE unsafeIndex #-}+ unsafeIndex (l, u) i =+ withU64Vec4 l \l1 l2 l3 l4 ->+ withU64Vec4 u \u1 u2 u3 u4 ->+ withU64Vec4 i \i1 i2 i3 i4 ->+ unsafeIndex (l4, u4) i4 + unsafeRangeSize (l4, u4) * (+ unsafeIndex (l3, u3) i3 + unsafeRangeSize (l3, u3) * (+ unsafeIndex (l2, u2) i2 + unsafeRangeSize (l2, u2) * (+ unsafeIndex (l1, u1) i1)))++ {-# INLINE inRange #-}+ inRange (l, u) i =+ withU64Vec4 l \l1 l2 l3 l4 ->+ withU64Vec4 u \u1 u2 u3 u4 ->+ withU64Vec4 i \i1 i2 i3 i4 ->+ inRange (l1, u1) i1 &&+ inRange (l2, u2) i2 &&+ inRange (l3, u3) i3 &&+ inRange (l4, u4) i4++{-# INLINE dot #-}+dot :: U64Vec4 -> U64Vec4 -> Word64+dot (U64Vec4 l1 l2 l3 l4) (U64Vec4 r1 r2 r3 r4) =+ l1 * r1 + l2 * r2 + l3 * r3 + l4 * r4++#ifdef SERIALISE+instance Serialise U64Vec4 where+ encode v = withU64Vec4 v \x y z w ->+ Serialise.encodeListLen 4 <> encode x <> encode y <> encode z <> encode w+ decode =+ Serialise.decodeListLenOf 4 *> (u64vec4 <$> decode <*> decode <*> decode <*> decode)+#endif
src/Geomancy/UVec2.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-}@@ -30,6 +32,7 @@ import Foreign (Storable(..)) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.Ix (Ix(..))+import GHC.Records (HasField(..)) #ifdef TH_LIFT import Language.Haskell.TH.Syntax (Lift)@@ -66,6 +69,14 @@ pattern WithUVec2 :: Word32 -> Word32 -> UVec2 pattern WithUVec2 a b <- ((`withUVec2` (,)) -> (a, b)) {-# COMPLETE WithUVec2 #-}++instance HasField "x" UVec2 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \x _ -> x++instance HasField "y" UVec2 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec2 v \_ y -> y {-# INLINE convert #-} convert :: Coercible v UVec2 => (Word32 -> a) -> (a -> a -> r) -> v -> r
src/Geomancy/UVec3.hs view
@@ -39,6 +39,7 @@ import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.Ix (Ix(..)) import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..)) import WebColor.Labels (IsWebColor(..)) #ifdef TH_LIFT@@ -78,6 +79,18 @@ pattern WithUVec3 a b c <- ((`withUVec3` (,,)) -> (a, b, c)) {-# COMPLETE WithUVec3 #-} +instance HasField "x" UVec3 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \x _ _ -> x++instance HasField "y" UVec3 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ y _ -> y++instance HasField "z" UVec3 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec3 v \_ _ z -> z+ {-# INLINE convert #-} convert :: Coercible v UVec3 => (Word32 -> a) -> (a -> a -> a -> r) -> v -> r convert f t v =@@ -218,6 +231,18 @@ {-# INLINE packed #-} packed :: Word32 -> Word32 -> Word32 -> Packed packed a b c = Packed (uvec3 a b c)++instance HasField "x" Packed Word32 where+ {-# INLINE getField #-}+ getField (Packed v) = withUVec3 v \x _ _ -> x++instance HasField "y" Packed Word32 where+ {-# INLINE getField #-}+ getField (Packed v) = withUVec3 v \_ y _ -> y++instance HasField "z" Packed Word32 where+ {-# INLINE getField #-}+ getField (Packed v) = withUVec3 v \_ _ z -> z instance Storable Packed where {-# INLINE sizeOf #-}
src/Geomancy/UVec4.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-}@@ -30,6 +32,7 @@ import Foreign (Storable(..)) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.Ix (Ix(..))+import GHC.Records (HasField(..)) #ifdef TH_LIFT import Language.Haskell.TH.Syntax (Lift)@@ -68,6 +71,22 @@ pattern WithUVec4 :: Word32 -> Word32 -> Word32 -> Word32 -> UVec4 pattern WithUVec4 a b c d <- ((`withUVec4` (,,,)) -> (a, b, c, d)) {-# COMPLETE WithUVec4 #-}++instance HasField "x" UVec4 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \x _ _ _ -> x++instance HasField "y" UVec4 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ y _ _ -> y++instance HasField "z" UVec4 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ z _ -> z++instance HasField "w" UVec4 Word32 where+ {-# INLINE getField #-}+ getField v = withUVec4 v \_ _ _ w -> w {-# INLINE convert #-} convert :: Coercible v UVec4 => (Word32 -> a) -> (a -> a -> a -> a -> r) -> v -> r
src/Geomancy/Vec2.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-}@@ -36,6 +37,7 @@ import Data.VectorSpace (VectorSpace) import Foreign (Storable(..)) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff)+import GHC.Records (HasField(..)) import qualified Data.VectorSpace as VectorSpace #ifdef TH_LIFT@@ -80,6 +82,14 @@ pattern WithVec2 :: Float -> Float -> Vec2 pattern WithVec2 a b <- ((`withVec2` (,)) -> (a, b)) {-# COMPLETE WithVec2 #-}++instance HasField "x" Vec2 Float where+ {-# INLINE getField #-}+ getField v = withVec2 v \x _ -> x++instance HasField "y" Vec2 Float where+ {-# INLINE getField #-}+ getField v = withVec2 v \_ y -> y {-# INLINE fromTuple #-} fromTuple :: (Float, Float) -> Vec2
src/Geomancy/Vec3.hs view
@@ -53,6 +53,7 @@ import Foreign (Storable(..), castPtr) import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..)) import WebColor.Labels (IsWebColor(..)) #ifdef TH_LIFT@@ -100,6 +101,18 @@ pattern WithVec3 a b c <- ((`withVec3` (,,)) -> (a, b, c)) {-# COMPLETE WithVec3 #-} +instance HasField "x" Vec3 Float where+ {-# INLINE getField #-}+ getField v = withVec3 v \x _ _ -> x++instance HasField "y" Vec3 Float where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ y _ -> y++instance HasField "z" Vec3 Float where+ {-# INLINE getField #-}+ getField v = withVec3 v \_ _ z -> z+ {-# INLINE fromVec2 #-} fromVec2 :: Coercible Vec3 a => Vec2 -> Float -> a fromVec2 xy z =@@ -407,6 +420,18 @@ {-# INLINE packed #-} packed :: Float -> Float -> Float -> Packed packed x y z = Packed (vec3 x y z)++instance HasField "x" Packed Float where+ {-# INLINE getField #-}+ getField (Packed v) = withVec3 v \x _ _ -> x++instance HasField "y" Packed Float where+ {-# INLINE getField #-}+ getField (Packed v) = withVec3 v \_ y _ -> y++instance HasField "z" Packed Float where+ {-# INLINE getField #-}+ getField (Packed v) = withVec3 v \_ _ z -> z instance Storable Packed where {-# INLINE sizeOf #-}
src/Geomancy/Vec4.hs view
@@ -52,6 +52,7 @@ import Foreign.Ptr.Diff (peekDiffOff, pokeDiffOff) import GHC.IO (IO(..)) import GHC.OverloadedLabels (IsLabel(..))+import GHC.Records (HasField(..)) import Text.Printf (printf) import WebColor.Labels (IsWebColorAlpha(..)) @@ -73,22 +74,24 @@ data Vec4 = Vec4 ByteArray# -{-# INLINE vec4 #-}+{-# INLINE [1] vec4 #-} vec4 :: Float -> Float -> Float -> Float -> Vec4-vec4 (F# v0) (F# v1) (F# v2) (F# v3) =+vec4 v0 v1 v2 v3 = runRW# \world -> let- !(# world_, arr #) = newAlignedPinnedByteArray# 16# 16# world+ !(# world_, arr #) = newByteArray# 16# world - world0 = writeFloatArray# arr 0x0# v0 world_- world1 = writeFloatArray# arr 0x1# v1 world0- world2 = writeFloatArray# arr 0x2# v2 world1- world3 = writeFloatArray# arr 0x3# v3 world2+ write i (F# v) = writeFloatArray# arr i v++ world0 = write 0x0# v0 world_+ world1 = write 0x1# v1 world0+ world2 = write 0x2# v2 world1+ world3 = write 0x3# v3 world2 !(# _world', arr' #) = unsafeFreezeByteArray# arr world3 in Vec4 arr' -{-# INLINE withVec4 #-}+{-# INLINE [1] withVec4 #-} withVec4 :: Vec4 -> (Float -> Float -> Float -> Float -> r)@@ -100,31 +103,45 @@ (F# (indexFloatArray# arr 0x2#)) (F# (indexFloatArray# arr 0x3#)) +{-# RULES+"withVec4/vec4" forall a b c d f.+ withVec4 (vec4 a b c d) f = f a b c d+"withVec4/withVec4" forall v k f.+ withVec4 (withVec4 v k) f = withVec4 v \a b c d -> withVec4 (k a b c d) f+ #-}+ {-# INLINE convert #-} convert :: Coercible v Vec4 => (Float -> a) -> (a -> a -> a -> a -> r) -> v -> r convert f t v = withVec4 (coerce v) \a b c d-> t (f a) (f b) (f c) (f d) -{-# INLINE compareVec4 #-}-compareVec4 :: Vec4 -> Vec4 -> Ordering-compareVec4 (Vec4 src1) (Vec4 src2) =- compare (I# (compareByteArrays# src1 0# src2 0# 16#)) 0- instance Eq Vec4 where- (==) a b =- case compareVec4 a b of- EQ -> True- _ -> False-- (/=) a b =- case compareVec4 a b of- EQ -> False- _ -> True+ Vec4 a == Vec4 b = go 0#+ where+ go i+ | isTrue# (i ==# 4#) = True+ | isTrue# (eqFloat# (indexFloatArray# a i) (indexFloatArray# b i)) = go (i +# 1#)+ | otherwise = False instance Ord Vec4 where- compare = compareVec4+ compare = lexicographic LT GT compare+ a < b = lexicographic True False (<) a b+ a <= b = not (b < a)+ a > b = b < a+ a >= b = not (a < b) +{-# INLINE lexicographic #-}+lexicographic :: r -> r -> (Float -> Float -> r) -> Vec4 -> Vec4 -> r+lexicographic lt gt lastElement (Vec4 a) (Vec4 b) = go 0#+ where+ go 3# = lastElement (F# (indexFloatArray# a 3#)) (F# (indexFloatArray# b 3#))+ go i =+ case compare (F# (indexFloatArray# a i)) (F# (indexFloatArray# b i)) of+ LT -> lt+ EQ -> go (i +# 1#)+ GT -> gt+ instance Show Vec4 where show v = withVec4 v $@@ -134,6 +151,22 @@ pattern WithVec4 a b c d <- ((`withVec4` (,,,)) -> (a, b, c, d)) {-# COMPLETE WithVec4 #-} +instance HasField "x" Vec4 Float where+ {-# INLINE getField #-}+ getField v = withVec4 v \x _ _ _ -> x++instance HasField "y" Vec4 Float where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ y _ _ -> y++instance HasField "z" Vec4 Float where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ z _ -> z++instance HasField "w" Vec4 Float where+ {-# INLINE getField #-}+ getField v = withVec4 v \_ _ _ w -> w+ {-# INLINE fromVec2 #-} fromVec2 :: Vec2 -> Float -> Float -> Vec4 fromVec2 xy z w =@@ -185,6 +218,7 @@ vec4 (f x) (f y) (f z) (f w) instance MonoPointed Vec4 where+ {-# INLINE opoint #-} opoint x = vec4 x x x x instance Elementwise Vec4 where@@ -300,20 +334,34 @@ instance Floating Vec4 where pi = opoint pi + {-# INLINE exp #-} exp = omap exp+ {-# INLINE log #-} log = omap log+ {-# INLINE sqrt #-} sqrt = omap sqrt+ {-# INLINE sin #-} sin = omap sin+ {-# INLINE cos #-} cos = omap cos+ {-# INLINE asin #-} asin = omap asin+ {-# INLINE acos #-} acos = omap acos+ {-# INLINE atan #-} atan = omap atan+ {-# INLINE sinh #-} sinh = omap sinh+ {-# INLINE cosh #-} cosh = omap cosh+ {-# INLINE asinh #-} asinh = omap asinh+ {-# INLINE acosh #-} acosh = omap acosh+ {-# INLINE atanh #-} atanh = omap atanh + {-# INLINE (**) #-} a ** b = withVec4 a \ax ay az aw -> withVec4 b \bx by bz bw ->@@ -333,18 +381,25 @@ {-# INLINE poke #-} poke (Ptr addr) (Vec4 arr) = IO \world -> let- world' = copyByteArrayToAddr# arr 0# addr 16# world+ store i = writeFloatOffAddr# addr i (indexFloatArray# arr i)++ world0 = store 0x0# world+ world1 = store 0x1# world0+ world2 = store 0x2# world1+ world' = store 0x3# world2 in (# world', () #) {-# INLINE peek #-} peek (Ptr addr) = IO \world -> let- !(# world0, arr #) = newAlignedPinnedByteArray# 16# 16# world- world1 = copyAddrToByteArray# addr arr 0# 16# world0- !(# world', arr' #) = unsafeFreezeByteArray# arr world1+ !(# world0, v0 #) = readFloatOffAddr# addr 0x0# world+ !(# world1, v1 #) = readFloatOffAddr# addr 0x1# world0+ !(# world2, v2 #) = readFloatOffAddr# addr 0x2# world1+ !(# world3, v3 #) = readFloatOffAddr# addr 0x3# world2+ !v = vec4 (F# v0) (F# v1) (F# v2) (F# v3) in- (# world', Vec4 arr' #)+ (# world3, v #) instance Block Vec4 where type PackedSize Vec4 = 16@@ -452,10 +507,10 @@ newVec4 = IO \world -> let- !(# world_, arr_ #) = newAlignedPinnedByteArray# 16# 16# world- !(# _world', arr #) = unsafeFreezeByteArray# arr_ world_+ !(# world_, arr_ #) = newByteArray# 16# world+ !(# world', arr #) = unsafeFreezeByteArray# arr_ world_ in- (# world, Vec4 arr #)+ (# world', Vec4 arr #) instance GlNearest Vec4
+ src/Geomancy/Vulkan/DProjection.hs view
@@ -0,0 +1,51 @@+module Geomancy.Vulkan.DProjection+ ( reverseDepthRH+ , reverseDepthOrthoRH+ , orthoRH+ ) where++import Geomancy.DMat4 (colMajor)+import Geomancy.DTransform (DTransform(..))++reverseDepthRH+ :: Double+ -> Double+ -> Double -> Double+ -> DTransform+reverseDepthRH fovRads zn width height =+ colMajor+ sx 0 0 0+ 0 sy 0 0+ 0 0 0 zn+ 0 0 1 0+ where+ sx = sy * recipAspect+ where+ recipAspect = height / width+ sy = 1 / tan (fovRads / 2)++orthoRH :: Double -> Double -> Double -> Double -> DTransform+orthoRH near far width height =+ colMajor+ sx 0 0 0+ 0 sy 0 0+ 0 0 z w+ 0 0 0 1+ where+ sx = 2 / width+ sy = 2 / height+ z = 1 / (far - near)+ w = near / (near - far)++reverseDepthOrthoRH :: Double -> Double -> Double -> Double -> DTransform+reverseDepthOrthoRH near far width height =+ colMajor+ sx 0 0 0+ 0 sy 0 0+ 0 0 z w+ 0 0 0 1+ where+ sx = 2 / width+ sy = 2 / height+ z = 1 / (near - far)+ w = far / (far - near)
+ src/Geomancy/Vulkan/DView.hs view
@@ -0,0 +1,38 @@+{-# LANGUAGE BlockArguments #-}++module Geomancy.Vulkan.DView+ ( lookAtRH+ , lookAtRH_+ ) where++import Geomancy.DMat4 (colMajor)+import Geomancy.DTransform (DTransform(..))+import Geomancy.DVec3 (DVec3, cross, dot, normalize, dvec3, withDVec3)++lookAtRH+ :: DVec3+ -> DVec3+ -> DVec3+ -> DTransform+lookAtRH eye target up =+ withDVec3 rgt \rx ry rz ->+ withDVec3 up' \ux uy uz ->+ withDVec3 fwd \fx fy fz ->+ colMajor+ rx ry rz (-er)+ ux uy uz (-eu)+ fx fy fz (-ef)+ 0 0 0 1+ where+ fwd = normalize (target - eye)+ rgt = normalize (cross fwd up)+ up' = normalize (cross fwd rgt)+ er = dot eye rgt+ eu = dot eye up'+ ef = dot eye fwd++{-# INLINE lookAtRH_ #-}+lookAtRH_ :: DVec3 -> DVec3 -> DTransform+lookAtRH_ eye target = lookAtRH eye target yNeg+ where+ yNeg = dvec3 0 (-1) 0
+ test/Main.hs view
@@ -0,0 +1,38 @@+{-# LANGUAGE ImportQualifiedPost #-}++module Main (main) where++import Test.Tasty (defaultMain, testGroup)++import Spec.DMat4 qualified+import Spec.DQuaternion qualified+import Spec.DTransform qualified+import Spec.DVec qualified+import Spec.Fusion qualified+import Spec.Mat4 qualified+import Spec.Point qualified+import Spec.Quaternion qualified+import Spec.Storable qualified+import Spec.Swizzle qualified+import Spec.Transform qualified+import Spec.Vec4 qualified+import Spec.Vec64 qualified+import Spec.Vulkan qualified++main :: IO ()+main = defaultMain $ testGroup "geomancy"+ [ Spec.Mat4.tests+ , Spec.Transform.tests+ , Spec.Quaternion.tests+ , Spec.Vulkan.tests+ , Spec.DMat4.tests+ , Spec.DTransform.tests+ , Spec.DQuaternion.tests+ , Spec.DVec.tests+ , Spec.Vec4.tests+ , Spec.Vec64.tests+ , Spec.Point.tests+ , Spec.Storable.tests+ , Spec.Fusion.tests+ , Spec.Swizzle.tests+ ]
− test/Spec.hs
@@ -1,430 +0,0 @@-{-# LANGUAGE BlockArguments #-}-{-# LANGUAGE ImportQualifiedPost #-}-{-# LANGUAGE NumericUnderscores #-}-{-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeApplications #-}--import Geomancy-import Hedgehog--import Control.Monad (when)-import Data.Foldable (toList)-import GHC.Stack (withFrozenCallStack)-import Hedgehog.Gen qualified as Gen-import Hedgehog.Range qualified as Range-import Linear qualified-import Linear.Quaternion qualified-import System.Exit (exitFailure, exitSuccess)-import Text.Printf (printf)--import Geomancy.Mat4 (withRowMajor, (!*))-import Geomancy.Mat4 qualified-import Geomancy.Quaternion qualified-import Geomancy.Transform ((!.))-import Geomancy.Transform qualified as Transform-import Geomancy.Vulkan.Projection qualified as Projection-import Geomancy.Vulkan.View qualified as View--import Linear ((!*!))--main :: IO ()-main = do- passed <- checkParallel discovered- if passed then- exitSuccess- else- exitFailure---- | Enough tests to cover the principles-pattern PROP_TESTS :: TestLimit-pattern PROP_TESTS = 10_000---- | Try harder to catch FP precision errors-pattern PROP_TESTS_BRUTAL :: TestLimit-pattern PROP_TESTS_BRUTAL = 10_000_000--prop_mat4_assoc :: Property-prop_mat4_assoc = withTests PROP_TESTS $ property do- (p, p_) <- forAllTransform- (v, v_) <- forAllTransform- (m, m_) <- forAllTransform-- let- pv'm = (p <> v) <> m- p'vm = p <> (v <> m)- delta' = nearlyEqualMat4 pv'm p'vm- replicate 16 Nothing === delta'-- let- mv_p = (m_ !*! v_) !*! p_- m_vp = m_ !*! (v_ !*! p_)- delta_ = nearlyEqualM44 mv_p m_vp- replicate 16 Nothing === delta_-- -- Inter-library calculated values nearlyEqual- replicate 16 Nothing === nearlyEqualM44 m_vp (toM44 p'vm)- replicate 16 Nothing === nearlyEqualM44 mv_p (toM44 pv'm)--prop_mat4_order :: Property-prop_mat4_order = withTests 1 $ property do- let- cm = Geomancy.Mat4.colMajor @Geomancy.Mat4.Mat4- 0 1 2 3- 4 5 6 7- 8 9 0 1- 2 3 4 5- rm = Geomancy.Mat4.rowMajor @Geomancy.Mat4.Mat4- 0 4 8 2- 1 5 9 3- 2 6 0 4- 3 7 1 5- Geomancy.Mat4.toListColMajor2d cm === Geomancy.Mat4.toListColMajor2d rm-- let- cmT = Geomancy.Mat4.transpose cm- rmT = Geomancy.Mat4.transpose rm- Geomancy.Mat4.toListColMajor2d cmT === Geomancy.Mat4.toListColMajor2d rmT--prop_transform_det :: Property-prop_transform_det = withTests 1 $ property do- 1 === Geomancy.Mat4.det Geomancy.Mat4.identity- 1 === Geomancy.Mat4.det (Transform.rotateY (pi/6)) -- area-preserving- 1 === Geomancy.Mat4.det (Transform.translate 1 2 3) -- area-preserving too- 0 === Geomancy.Mat4.det (Transform.scaleX 0) -- space collapse, no inverse- -1 === Geomancy.Mat4.det (Transform.scaleZ (-1)) -- flips the space- 8 === Geomancy.Mat4.det (Transform.scale 2) -- stretches a little- (1/8) === Geomancy.Mat4.det (Transform.scale (1/2)) -- stretches backwards--prop_projection_reverseDepthRH :: Property-prop_projection_reverseDepthRH = withTests 1 $ property do- let fov90 = pi / 2- let zNear = 0.1- let Transform p = Projection.reverseDepthRH fov90 zNear 800 600- annotateShow p- let- -- stating the expected in transposed order for testing- Transform expected = Geomancy.Mat4.rowMajor- 0.7500 0.0000 0.0000 0.0000- 0.0000 1.0000 0.0000 0.0000- 0.0000 0.0000 0.0000 1.0000- 0.0000 0.0000 zNear 0.0000- annotateShow expected- let delta_ = nearlyEqualMat4 p expected- replicate 16 Nothing === delta_-- let- centerNearIn = vec4 0 0 zNear 1- centerNearOut = p !* centerNearIn- centerNearNDC = toNDC centerNearOut- annotateShow (centerNearIn, centerNearOut)- vec3 0 0 1 === centerNearNDC--prop_projection_orthoRH_identity :: Property-prop_projection_orthoRH_identity = withTests 1 $ property do- let Transform pNative = Projection.orthoRH 0 1 2 2- annotateShow pNative- let delta_ = nearlyEqualMat4 pNative mempty- replicate 16 Nothing === delta_--prop_projection_reverseDepthOrthoRH :: Property-prop_projection_reverseDepthOrthoRH = withTests 1 $ property do- let t = Projection.reverseDepthOrthoRH 1 10 800 600- annotateShow t-- vec4 0 0 1 1 === t !* vec4 0 0 1 1 -- center/near- vec4 0 0 0 1 === t !* vec4 0 0 10 1 -- center/far- vec4 1 1 0 1 === t !* vec4 400 300 10 1 -- edge/far- vec4 (-1/400) (-1/300) 1 1 === t !* vec4 (-1) (-1) 1 1 -- step/near- vec4 (1/400) (1/300) 0 1 === t !* vec4 1 1 10 1 -- step/far--toNDC :: Vec4 -> Vec3-toNDC v = withVec4 v \x y z w -> vec3 (x/w) (y/w) (z/w)--prop_view_lookAtRH_identity :: Property-prop_view_lookAtRH_identity = property do- let alreadyThere = View.lookAtRH_ (vec3 0 0 0) (vec3 0 0 1)- annotateShow alreadyThere-- p <- forAll genVec3-- p === Transform.apply p alreadyThere--xPos :: Vec3-xPos = vec3 1 0 0--xNeg :: Vec3-xNeg = vec3 (-1) 0 0--yPos :: Vec3-yPos = vec3 0 1 0--yNeg :: Vec3-yNeg = vec3 0 (-1) 0--zPos :: Vec3-zPos = vec3 0 0 1--zNeg :: Vec3-zNeg = vec3 0 0 (-1)--prop_transform_rotateX :: Property-prop_transform_rotateX = property do- let angle = pi / 2- let t = Transform.rotateX angle- let q = Transform.rotateQ (Geomancy.Quaternion.axisAngle (vec3 1 0 0) angle)- let yNegT = t !. zPos- annotateShow yNegT- let yNegQ = q !. zPos- annotateShow yNegQ- replicate 3 Nothing === nearlyEqualVec3 yNegT yNeg- replicate 3 Nothing === nearlyEqualVec3 yNegQ yNeg--prop_transform_rotateY :: Property-prop_transform_rotateY = property do- let angle = pi / 2- let t = Transform.rotateY angle- let q = Transform.rotateQ (Geomancy.Quaternion.axisAngle (vec3 0 1 0) angle)- let xPosT = t !. zPos- annotateShow xPosT- let xPosQ = q !. zPos- annotateShow xPosQ- replicate 3 Nothing === nearlyEqualVec3 xPosT xPos- replicate 3 Nothing === nearlyEqualVec3 xPosQ xPos--prop_transform_rotateZ :: Property-prop_transform_rotateZ = property do- let angle = pi / 2- let t = Transform.rotateZ angle- let q = Transform.rotateQ (Geomancy.Quaternion.axisAngle (vec3 0 0 1) angle)- let yPosT = t !. xPos- annotateShow yPosT- let yPosQ = q !. xPos- annotateShow yPosQ- replicate 3 Nothing === nearlyEqualVec3 yPosT yPos- replicate 3 Nothing === nearlyEqualVec3 yPosQ yPos--prop_quaternion_ref :: Property-prop_quaternion_ref = property do- annotate "Construction"- (axis, angle) <- forAll $ (,) <$> genVec3 <*> genAngle- let qg = Geomancy.Quaternion.axisAngle axis angle- let ql = Linear.Quaternion.axisAngle (withVec3 axis Linear.V3) angle- show qg === show (fromLQ ql)-- annotate "Rotation"- p <- forAll genVec3- let rpg = Geomancy.Quaternion.rotate qg p- let rpl = Linear.Quaternion.rotate ql (withVec3 p Linear.V3)- show rpg === show (fromV3 rpl)-- annotate "Multiplication"- (axisB, angleB) <- forAll $ (,) <$> genVec3 <*> genAngle- let qgB = Geomancy.Quaternion.axisAngle axisB angleB- let qlB = Linear.Quaternion.axisAngle (withVec3 axisB Linear.V3) angleB- let prodg = qg * qgB- let prodl = ql * qlB- show prodg === show (fromLQ prodl)--prop_quaternion_associativity :: Property-prop_quaternion_associativity = property do- (a, b, c) <- forAll $ (,,)- <$> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)- <*> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)- <*> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)- let ab'c = (a * b) * c- annotateShow ab'c- let a'bc = a * (b * c)- annotateShow a'bc- replicate 4 Nothing === nearlyEqualQ ab'c a'bc--prop_quaternion_intrinsic :: Property-prop_quaternion_intrinsic = withTests 1 $ property do- let yaw = pi / 2- let pitch = pi / 2- let roll = 0- let q = Geomancy.Quaternion.intrinsic roll pitch yaw- let forward' = Geomancy.Quaternion.rotate q zPos- let right' = Geomancy.Quaternion.rotate q xPos- let up' = Geomancy.Quaternion.rotate q yNeg- replicate 3 Nothing === nearlyEqualVec3 yNeg forward'- replicate 3 Nothing === nearlyEqualVec3 zNeg right'- replicate 3 Nothing === nearlyEqualVec3 xNeg up'--prop_quaternion_extrinsic :: Property-prop_quaternion_extrinsic = withTests 1 $ property do- let heading = pi / 2- let elevation = pi / 2- let tilt = 0- let q = Geomancy.Quaternion.extrinsic heading elevation tilt- let forward' = Geomancy.Quaternion.rotate q zPos- let right' = Geomancy.Quaternion.rotate q xPos- let up' = Geomancy.Quaternion.rotate q yNeg- replicate 3 Nothing === nearlyEqualVec3 xPos forward'- replicate 3 Nothing === nearlyEqualVec3 yPos right'- replicate 3 Nothing === nearlyEqualVec3 zNeg up'--prop_quaternion_intrinsic_ref :: Property-prop_quaternion_intrinsic_ref = property do- (roll, pitch, yaw) <- forAll $ (,,) <$> genAngle <*> genAngle <*> genAngle- let fused = Geomancy.Quaternion.intrinsic roll pitch yaw- annotateShow fused- let composed = intrinsicComposed roll pitch yaw- annotateShow composed- let viaFused = Geomancy.Quaternion.rotate fused zPos- annotateShow viaFused- let viaComposed = Geomancy.Quaternion.rotate composed zPos- replicate 3 Nothing === nearlyEqualVec3 viaFused viaComposed--intrinsicComposed :: Float -> Float -> Float -> Quaternion-intrinsicComposed roll pitch yaw =- Geomancy.Quaternion.axisAngle (vec3 0 1 0) yaw *- Geomancy.Quaternion.axisAngle (vec3 1 0 0) pitch *- Geomancy.Quaternion.axisAngle (vec3 0 0 1) roll--prop_transform_node :: Property-prop_transform_node = withTests 1 $ property do- let t = vec3 2 3 5- let r = intrinsicComposed 0 0 (pi/7)- let s = 11- let dps = Transform.node t r s- let node = trs t r s- let v = vec3 0 0 1- replicate 3 Nothing === nearlyEqualVec3 (dps !. v) (node !. v)--trs :: Vec3 -> Quaternion -> Vec3 -> Transform-trs t r s = mconcat- [ Transform.translateV t- , Transform.rotateQ r- , Transform.scaleV s- ]--prop_transform_order :: Property-prop_transform_order = withTests 1 $ property do- let parent = Transform.node (vec3 4 5 6) (intrinsicComposed 0 0 (pi/6)) 2- let local = Transform.node (vec3 7 8 9) (intrinsicComposed 0 (pi/6) 0) (1/3)- let precomp = parent <> local !. vec3 0 0 1- let nocomp = parent !. local !. vec3 0 0 1-- replicate 3 Nothing === nearlyEqualVec3 precomp nocomp--forAllTransform :: PropertyT IO (Geomancy.Mat4.Mat4, Linear.M44 Float)-forAllTransform = withFrozenCallStack do- (_name, Transform g) <- forAllWith fst genTransform- pure (g, toM44 g)--genVec3 :: Gen Vec3-genVec3 =- vec3- <$> Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)- <*> Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)- <*> Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)--genAngle :: Gen Float-genAngle = Gen.float (Range.linearFracFrom 0.0 (-8*pi) (8*pi))--genTransform :: Gen ([Char], Transform) -- TODO: cross-check with Linear-genTransform = Gen.choice- [ genIdentity- , genTranslate- , genRotate- , genScale- ]- where- genIdentity = pure ("identity", mempty)-- genTranslate = do- x <- Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)- y <- Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)- z <- Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)- when (abs x == 0 && abs y == 0 && abs z == 0) Gen.discard- pure- ( printf "translate %0.4f %0.4f %0.4f" x y z- , Transform.translate x y z- )-- genRotate = do- (name, axis) <- Gen.element- [ ("rotate/x", Transform.rotateX)- , ("rotate/y", Transform.rotateY)- , ("rotate/z", Transform.rotateZ)- ]- angle <- genAngle- when (abs angle == 0) Gen.discard- pure- ( printf "%s %0.4f" name angle- , axis angle- )-- genScale = do- x <- Gen.float (Range.linearFracFrom 1.0 1e-6 1e6)- y <- Gen.float (Range.linearFracFrom 1.0 1e-6 1e6)- z <- Gen.float (Range.linearFracFrom 1.0 1e-6 1e6)- when (abs x == 1 && abs y == 1 && abs z == 1) Gen.discard- pure- ( printf "scale %0.4f %0.4f %0.4f" x y z- , Transform.scale3 x y z- )--fromV3 :: Linear.V3 Float -> Vec3-fromV3 (Linear.V3 x y z) = Geomancy.vec3 x y z--fromLQ :: Linear.Quaternion.Quaternion Float -> Geomancy.Quaternion-fromLQ (Linear.Quaternion.Quaternion s (Linear.V3 x y z)) = Geomancy.quaternion s x y z--toM44 :: Geomancy.Mat4 -> Linear.M44 Float-toM44 mat4 =- withRowMajor mat4- \ m00 m10 m20 m30- m01 m11 m21 m31- m02 m12 m22 m32- m03 m13 m23 m33 ->- Linear.V4- (Linear.V4 m00 m10 m20 m30)- (Linear.V4 m01 m11 m21 m31)- (Linear.V4 m02 m12 m22 m32)- (Linear.V4 m03 m13 m23 m33)--nearlyEqualMat4 :: Geomancy.Mat4.Mat4 -> Geomancy.Mat4.Mat4 -> [Maybe Oops]-nearlyEqualMat4 a b = Geomancy.Mat4.zipWith nearlyEqual a b--nearlyEqualM44 :: Linear.M44 Float -> Linear.M44 Float -> [Maybe Oops]-nearlyEqualM44 a b = zipWith nearlyEqual (concatMap toList a) (concatMap toList b)--nearlyEqualVec3 :: Vec3 -> Vec3 -> [Maybe Oops]-nearlyEqualVec3 a b =- withVec3 a \ax ay az ->- withVec3 b \bx by bz ->- [ nearlyEqual ax bx- , nearlyEqual ay by- , nearlyEqual az bz- ]--nearlyEqualQ :: Geomancy.Quaternion -> Geomancy.Quaternion -> [Maybe Oops]-nearlyEqualQ a b =- Geomancy.withQuaternion a \as ax ay az ->- Geomancy.withQuaternion b \bs bx by bz ->- [ nearlyEqual as bs- , nearlyEqual ax bx- , nearlyEqual ay by- , nearlyEqual az bz- ]--nearlyEqual :: Float -> Float -> Maybe Oops-nearlyEqual lhs rhs =- if lhs == rhs || absDiff < 1e-4 || relDiff < 1e-4 then- Nothing- else- Just Oops{..}- where- absDiff = abs $ lhs - rhs- relDiff = absDiff / (abs lhs + abs rhs)- -- fltEps = 1.19209290e-07- -- fltMin = 1.175494e-38--data Oops = Oops {lhs :: Float, rhs :: Float, absDiff :: Float, relDiff :: Float}- deriving (Eq, Show)--discovered :: Group-discovered = $$(discover)
+ test/Spec/DMat4.hs view
@@ -0,0 +1,159 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeApplications #-}++module Spec.DMat4 (tests) where++import Hedgehog+import Hedgehog.Gen qualified as Gen+import Hedgehog.Range qualified as Range+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Linear qualified+import Linear ((!*!))++import Geomancy.DMat4 qualified+import Geomancy.DVec4 qualified+import Geomancy.Mat4 ((!*))+import Geomancy.Transform qualified as Transform++import Support.Ball (balls, balls44, consistent, enclosed, narrow, widen)+import Support.Gen (forAllDTransform, forAllTransform, genDVec4, genEdgeScalar, genMostlySame, genVec4)+import Support.Linear (entries, toM44, toM44D, toV4, toV4D)+import Support.Property (pattern PROP_TESTS)+import Support.Reference.Mat4 qualified as Ref.Mat4++tests :: TestTree+tests = testGroup "DMat4"+ [ testPropertyNamed "assoc" "prop_dmat4_assoc" prop_dmat4_assoc+ , testPropertyNamed "order" "prop_dmat4_order" prop_dmat4_order+ , testPropertyNamed "eq" "prop_dmat4_eq" prop_dmat4_eq+ , testPropertyNamed "det" "prop_dmat4_det" prop_dmat4_det+ , testPropertyNamed "inverse" "prop_dmat4_inverse" prop_dmat4_inverse+ , testPropertyNamed "apply" "prop_dmat4_apply" prop_dmat4_apply+ , testPropertyNamed "float_parity" "prop_dmat4_float_parity" prop_dmat4_float_parity+ ]++prop_dmat4_assoc :: Property+prop_dmat4_assoc = withDiscards 1000 . withTests PROP_TESTS $ property do+ (p, p_) <- forAllDTransform+ (v, v_) <- forAllDTransform+ (m, m_) <- forAllDTransform++ let+ pv'm = (p <> v) <> m+ p'vm = p <> (v <> m)+ pv'mBall = Ref.Mat4.compose (Ref.Mat4.compose (balls44 p_) (balls44 v_)) (balls44 m_)+ p'vmBall = Ref.Mat4.compose (balls44 p_) (Ref.Mat4.compose (balls44 v_) (balls44 m_))+ replicate 16 Nothing === enclosed (entries pv'mBall) (entries (toM44D pv'm))+ replicate 16 Nothing === enclosed (entries p'vmBall) (entries (toM44D p'vm))++ let+ mv_p = (m_ !*! v_) !*! p_+ m_vp = m_ !*! (v_ !*! p_)+ mv_pBall = (balls44 m_ !*! balls44 v_) !*! balls44 p_+ m_vpBall = balls44 m_ !*! (balls44 v_ !*! balls44 p_)+ replicate 16 Nothing === enclosed (entries mv_pBall) (entries mv_p)+ replicate 16 Nothing === enclosed (entries m_vpBall) (entries m_vp)++ replicate 16 Nothing === consistent (entries pv'mBall) (entries p'vmBall)+ replicate 16 Nothing === consistent (entries mv_pBall) (entries m_vpBall)+ replicate 16 Nothing === consistent (entries pv'mBall) (entries mv_pBall)++prop_dmat4_order :: Property+prop_dmat4_order = withTests 1 $ property do+ let+ cm = Geomancy.DMat4.colMajor @Geomancy.DMat4.DMat4+ 0 1 2 3+ 4 5 6 7+ 8 9 0 1+ 2 3 4 5+ rm = Geomancy.DMat4.rowMajor @Geomancy.DMat4.DMat4+ 0 4 8 2+ 1 5 9 3+ 2 6 0 4+ 3 7 1 5+ Geomancy.DMat4.toListColMajor2d cm === Geomancy.DMat4.toListColMajor2d rm++ let+ cmT = Geomancy.DMat4.transpose cm+ rmT = Geomancy.DMat4.transpose rm+ Geomancy.DMat4.toListColMajor2d cmT === Geomancy.DMat4.toListColMajor2d rmT++prop_dmat4_det :: Property+prop_dmat4_det = withTests 1 $ property do+ 1 === Geomancy.DMat4.det Geomancy.DMat4.identity+ 1 === Geomancy.DMat4.det (Geomancy.DMat4.fromMat4 $ Transform.translate 1 2 3)+ 0 === Geomancy.DMat4.det (Geomancy.DMat4.fromMat4 $ Transform.scaleX 0)+ -1 === Geomancy.DMat4.det (Geomancy.DMat4.fromMat4 $ Transform.scaleZ (-1))+ 8 === Geomancy.DMat4.det (Geomancy.DMat4.fromMat4 $ Transform.scale 2)+ (1/8) === Geomancy.DMat4.det (Geomancy.DMat4.fromMat4 $ Transform.scale (1/2))++prop_dmat4_inverse :: Property+prop_dmat4_inverse = withDiscards 1000 . withTests PROP_TESTS $ property do+ (m, m_) <- forAllDTransform+ let+ mm' = m <> Geomancy.DMat4.inverse m+ mBall = balls44 m_+ mm'Ball = Ref.Mat4.compose mBall (Ref.Mat4.inverse mBall)+ annotateShow mm'+ replicate 16 Nothing === enclosed (entries mm'Ball) (entries (toM44D mm'))+ replicate 16 Nothing === enclosed (entries mm'Ball) (entries (Linear.identity :: Linear.M44 Double))++prop_dmat4_apply :: Property+prop_dmat4_apply = withDiscards 1000 . withTests PROP_TESTS $ property do+ (m, m_) <- forAllDTransform+ v <- forAll genDVec4+ let+ out = m Geomancy.DMat4.!* v+ out_ = toV4D v Linear.*! m_+ outBall = Ref.Mat4.apply (balls44 m_) (balls (toV4D v))+ out_Ball = balls (toV4D v) Linear.*! balls44 m_+ annotateShow out+ annotateShow out_+ replicate 4 Nothing === enclosed outBall (toV4D out)+ replicate 4 Nothing === enclosed out_Ball out_+ replicate 4 Nothing === consistent outBall out_Ball++prop_dmat4_float_parity :: Property+prop_dmat4_float_parity = withDiscards 1000 . withTests PROP_TESTS $ property do+ (a, a_) <- forAllTransform+ (b, b_) <- forAllTransform+ let+ viaDouble =+ Geomancy.DMat4.toMat4 $+ Geomancy.DMat4.fromMat4 a <> Geomancy.DMat4.fromMat4 b+ widened = fmap (fmap widen) . balls44+ viaDoubleBall = fmap (fmap narrow) $ Ref.Mat4.compose (widened a_) (widened b_)+ viaFloatBall = Ref.Mat4.compose (balls44 a_) (balls44 b_)+ replicate 16 Nothing === enclosed (entries viaDoubleBall) (entries (toM44 viaDouble))+ replicate 16 Nothing === enclosed (entries viaFloatBall) (entries (toM44 (a <> b)))+ replicate 16 Nothing === consistent (entries viaDoubleBall) (entries viaFloatBall)++ v <- forAll genVec4+ let+ viaDoubleV =+ Geomancy.DVec4.toVec4 $+ Geomancy.DMat4.fromMat4 a Geomancy.DMat4.!* Geomancy.DVec4.fromVec4 v+ viaDoubleVBall =+ fmap narrow $ Ref.Mat4.apply (widened a_) (fmap widen (balls (toV4 v)))+ viaFloatVBall = Ref.Mat4.apply (balls44 a_) (balls (toV4 v))+ replicate 4 Nothing === enclosed viaDoubleVBall (toV4 viaDoubleV)+ replicate 4 Nothing === enclosed viaFloatVBall (toV4 (a !* v))+ replicate 4 Nothing === consistent viaDoubleVBall viaFloatVBall++prop_dmat4_eq :: Property+prop_dmat4_eq = withTests PROP_TESTS $ property do+ let+ four = Gen.list (Range.singleton 4)+ fromRows = evalMaybe . Geomancy.DMat4.fromRowMajor2d @[] @Geomancy.DMat4.DMat4+ rowsA <- forAll $ four (four genEdgeScalar)+ rowsB <- forAll $ traverse (traverse (genMostlySame 8)) rowsA+ a <- fromRows rowsA+ b <- fromRows rowsB+ label $ if rowsA == rowsB then "equal" else "different"+ (a == b) === (rowsA == rowsB)+ (a /= b) === (rowsA /= rowsB)
+ test/Spec/DQuaternion.hs view
@@ -0,0 +1,180 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}++module Spec.DQuaternion (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Hedgehog.Gen qualified as Gen+import Hedgehog.Range qualified as Range+import Linear (V3(..))+import Linear.Quaternion qualified++import Geomancy.DQuaternion qualified+import Geomancy.DTransform qualified as DTransform+import Geomancy.Quaternion qualified++import Support.Ball (balls, consistent, enclosed, exactly, narrow, widen)+import Support.Fixtures (intrinsicComposedD, intrinsicComposedRef, quarterTurn, rotationsMatch)+import Support.Gen (genAngle, genAngleD, genDVec3, genSmallDVec3, genVec3)+import Support.Linear (toQ, toQD, toV3D)+import Support.Reference.Linear qualified as Ref.Linear+import Support.Reference.Quaternion qualified as Ref.Quaternion+import Support.Reference.Transform qualified as Ref.Transform++tests :: TestTree+tests = testGroup "DQuaternion"+ [ testPropertyNamed "ref" "prop_dquaternion_ref" prop_dquaternion_ref+ , testPropertyNamed "rotate_matrix" "prop_dquaternion_rotate_matrix" prop_dquaternion_rotate_matrix+ , testPropertyNamed "associativity" "prop_dquaternion_associativity" prop_dquaternion_associativity+ , testPropertyNamed "intrinsic" "prop_dquaternion_intrinsic" prop_dquaternion_intrinsic+ , testPropertyNamed "extrinsic" "prop_dquaternion_extrinsic" prop_dquaternion_extrinsic+ , testPropertyNamed "intrinsic_ref" "prop_dquaternion_intrinsic_ref" prop_dquaternion_intrinsic_ref+ , testPropertyNamed "float_parity" "prop_dquaternion_float_parity" prop_dquaternion_float_parity+ ]++prop_dquaternion_ref :: Property+prop_dquaternion_ref = property do+ annotate "Construction"+ (axis, angle) <- forAll $ (,) <$> genDVec3 <*> genAngleD+ let+ qg = Geomancy.DQuaternion.axisAngle axis angle+ ql = Linear.Quaternion.axisAngle (toV3D axis) angle+ qgBall = Ref.Quaternion.axisAngle (balls (toV3D axis)) (exactly angle)+ qlBall = Linear.Quaternion.axisAngle (balls (toV3D axis)) (exactly angle)+ replicate 4 Nothing === enclosed qgBall (toQD qg)+ replicate 4 Nothing === enclosed qlBall ql+ replicate 4 Nothing === consistent qgBall qlBall++ annotate "Rotation"+ p <- forAll genSmallDVec3+ let+ rpg = Geomancy.DQuaternion.rotate qg p+ rpl = Linear.Quaternion.rotate ql (toV3D p)+ rpgBall = Ref.Quaternion.rotate qgBall (balls (toV3D p))+ rplBall = Ref.Linear.rotate qlBall (balls (toV3D p))+ replicate 3 Nothing === enclosed rpgBall (toV3D rpg)+ replicate 3 Nothing === enclosed rplBall rpl+ replicate 3 Nothing === consistent rpgBall rplBall++ annotate "Multiplication"+ (axisB, angleB) <- forAll $ (,) <$> genDVec3 <*> genAngleD+ let+ qgB = Geomancy.DQuaternion.axisAngle axisB angleB+ qlB = Linear.Quaternion.axisAngle (toV3D axisB) angleB+ productGBall =+ qgBall `Ref.Quaternion.multiply`+ Ref.Quaternion.axisAngle (balls (toV3D axisB)) (exactly angleB)+ productLBall =+ qlBall `Ref.Linear.multiply`+ Linear.Quaternion.axisAngle (balls (toV3D axisB)) (exactly angleB)+ replicate 4 Nothing === enclosed productGBall (toQD (qg * qgB))+ replicate 4 Nothing === enclosed productLBall (ql * qlB)+ replicate 4 Nothing === consistent productGBall productLBall++prop_dquaternion_rotate_matrix :: Property+prop_dquaternion_rotate_matrix = property do+ q <- forAll $ dquaternion <$> genUnitish <*> genUnitish <*> genUnitish <*> genUnitish+ p <- forAll genSmallDVec3+ let+ viaRotate = Geomancy.DQuaternion.rotate q p+ viaMatrix = DTransform.rotateQ q DTransform.!. p+ viaRotateBall = Ref.Quaternion.rotate (balls (toQD q)) (balls (toV3D p))+ viaMatrixBall = Ref.Transform.rotateQ (balls (toQD q)) Ref.Transform.!. balls (toV3D p)+ replicate 3 Nothing === enclosed viaRotateBall (toV3D viaRotate)+ replicate 3 Nothing === enclosed viaMatrixBall (toV3D viaMatrix)+ replicate 3 Nothing === consistent viaRotateBall viaMatrixBall+ where+ genUnitish = Gen.double (Range.linearFracFrom 0.0 (-1) 1)++prop_dquaternion_associativity :: Property+prop_dquaternion_associativity = property do+ (a, b, c) <- forAll $ (,,)+ <$> (Geomancy.DQuaternion.axisAngle <$> genDVec3 <*> genAngleD)+ <*> (Geomancy.DQuaternion.axisAngle <$> genDVec3 <*> genAngleD)+ <*> (Geomancy.DQuaternion.axisAngle <$> genDVec3 <*> genAngleD)+ let ab'c = (a * b) * c+ annotateShow ab'c+ let a'bc = a * (b * c)+ annotateShow a'bc+ let+ aBall = balls (toQD a)+ bBall = balls (toQD b)+ cBall = balls (toQD c)+ ab'cBall = (aBall `Ref.Quaternion.multiply` bBall) `Ref.Quaternion.multiply` cBall+ a'bcBall = aBall `Ref.Quaternion.multiply` (bBall `Ref.Quaternion.multiply` cBall)+ replicate 4 Nothing === enclosed ab'cBall (toQD ab'c)+ replicate 4 Nothing === enclosed a'bcBall (toQD a'bc)+ replicate 4 Nothing === consistent ab'cBall a'bcBall++prop_dquaternion_intrinsic :: Property+prop_dquaternion_intrinsic = withTests 1 $ property do+ let+ q = Geomancy.DQuaternion.intrinsic 0 quarterTurn quarterTurn+ qBall = Ref.Quaternion.intrinsic 0 quarterTurn quarterTurn+ rotationsMatch toV3D+ (Geomancy.DQuaternion.rotate q)+ (Ref.Quaternion.rotate qBall)+ [ (dvec3 0 0 1, dvec3 0 (-1) 0)+ , (dvec3 1 0 0, dvec3 0 0 (-1))+ , (dvec3 0 (-1) 0, dvec3 (-1) 0 0)+ ]++prop_dquaternion_extrinsic :: Property+prop_dquaternion_extrinsic = withTests 1 $ property do+ let+ q = Geomancy.DQuaternion.extrinsic quarterTurn quarterTurn 0+ qBall = Ref.Quaternion.extrinsic quarterTurn quarterTurn 0+ rotationsMatch toV3D+ (Geomancy.DQuaternion.rotate q)+ (Ref.Quaternion.rotate qBall)+ [ (dvec3 0 0 1, dvec3 1 0 0)+ , (dvec3 1 0 0, dvec3 0 1 0)+ , (dvec3 0 (-1) 0, dvec3 0 0 (-1))+ ]++prop_dquaternion_intrinsic_ref :: Property+prop_dquaternion_intrinsic_ref = property do+ (roll, pitch, yaw) <- forAll $ (,,) <$> genAngleD <*> genAngleD <*> genAngleD+ let fused = Geomancy.DQuaternion.intrinsic roll pitch yaw+ annotateShow fused+ let composed = intrinsicComposedD roll pitch yaw+ annotateShow composed+ let+ viaFused = Geomancy.DQuaternion.rotate fused (dvec3 0 0 1)+ viaComposed = Geomancy.DQuaternion.rotate composed (dvec3 0 0 1)+ viaFusedBall =+ Ref.Quaternion.rotate+ (Ref.Quaternion.intrinsic (exactly roll) (exactly pitch) (exactly yaw))+ (V3 0 0 1)+ viaComposedBall =+ Ref.Quaternion.rotate+ (intrinsicComposedRef (exactly roll) (exactly pitch) (exactly yaw))+ (V3 0 0 1)+ replicate 3 Nothing === enclosed viaFusedBall (toV3D viaFused)+ replicate 3 Nothing === enclosed viaComposedBall (toV3D viaComposed)+ replicate 3 Nothing === consistent viaFusedBall viaComposedBall++prop_dquaternion_float_parity :: Property+prop_dquaternion_float_parity = property do+ (a, b) <- forAll $ (,)+ <$> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)+ <*> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)+ a === Geomancy.DQuaternion.toQuaternion (Geomancy.DQuaternion.fromQuaternion a)+ let+ viaDouble =+ Geomancy.DQuaternion.toQuaternion $+ Geomancy.DQuaternion.fromQuaternion a * Geomancy.DQuaternion.fromQuaternion b+ aBall = balls (toQ a)+ bBall = balls (toQ b)+ viaDoubleBall =+ fmap narrow $+ fmap widen aBall `Ref.Quaternion.multiply` fmap widen bBall+ viaFloatBall = aBall `Ref.Quaternion.multiply` bBall+ replicate 4 Nothing === enclosed viaDoubleBall (toQ viaDouble)+ replicate 4 Nothing === enclosed viaFloatBall (toQ (a * b))+ replicate 4 Nothing === consistent viaDoubleBall viaFloatBall
+ test/Spec/DTransform.hs view
@@ -0,0 +1,138 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}++module Spec.DTransform (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Data.Foldable (for_)+import Linear (M44, V3(..))++import Geomancy.DMat4 qualified+import Geomancy.DQuaternion qualified+import Geomancy.DTransform qualified as DTransform+import Geomancy.Mat4 qualified+import Geomancy.Transform ((!.))+import Geomancy.Transform qualified as Transform+import Geomancy.Vulkan.DView qualified as DView++import Support.Ball (Ball, balls, consistent, enclosed, exactly, narrow)+import Support.Fixtures+ (fourteenthTurn, intrinsicComposedD, intrinsicComposedRef, quarterTurn, rotationsMatch, trsRef, twelfthTurn)+import Support.Gen (genAngle, genTransform)+import Support.Linear (entries, toM44, toV3, toV3D)+import Support.Property (pattern PROP_TESTS)+import Support.Reference.Mat4 qualified as Ref.Mat4+import Support.Reference.Quaternion qualified as Ref.Quaternion+import Support.Reference.Transform qualified as Ref.Transform+import Support.Reference.Vulkan qualified as Ref.Vulkan++tests :: TestTree+tests = testGroup "DTransform"+ [ testPropertyNamed "det" "prop_dtransform_det" prop_dtransform_det+ , testPropertyNamed "rotate" "prop_dtransform_rotate" prop_dtransform_rotate+ , testPropertyNamed "node_order" "prop_dtransform_node_order" prop_dtransform_node_order+ , testPropertyNamed "float_parity" "prop_dtransform_float_parity" prop_dtransform_float_parity+ , testPropertyNamed "big_world" "prop_dtransform_big_world" prop_dtransform_big_world+ ]++prop_dtransform_det :: Property+prop_dtransform_det = withTests 1 $ property do+ 1 === Geomancy.DMat4.det (DTransform.translate 1 2 3)+ 0 === Geomancy.DMat4.det (DTransform.scaleX 0)+ -1 === Geomancy.DMat4.det (DTransform.scaleZ (-1))+ 8 === Geomancy.DMat4.det (DTransform.scale 2)+ (1/8) === Geomancy.DMat4.det (DTransform.scale (1/2))++ let+ rotatedBall = Ref.Mat4.det (Ref.Transform.rotateY twelfthTurn) :: Ball Double+ [Nothing] === enclosed [rotatedBall] [Geomancy.DMat4.det (DTransform.rotateY twelfthTurn)]+ [Nothing] === enclosed [rotatedBall] [1 :: Double]++prop_dtransform_rotate :: Property+prop_dtransform_rotate = withTests 1 $ property do+ let+ axisQ axis = DTransform.rotateQ (Geomancy.DQuaternion.axisAngle axis quarterTurn)+ axisQBall axis = Ref.Transform.rotateQ (Ref.Quaternion.axisAngle axis quarterTurn)+ cases =+ [ (DTransform.rotateX quarterTurn, Ref.Transform.rotateX quarterTurn, dvec3 0 0 1, dvec3 0 (-1) 0)+ , (axisQ (dvec3 1 0 0), axisQBall (V3 1 0 0), dvec3 0 0 1, dvec3 0 (-1) 0)+ , (DTransform.rotateY quarterTurn, Ref.Transform.rotateY quarterTurn, dvec3 0 0 1, dvec3 1 0 0)+ , (axisQ (dvec3 0 1 0), axisQBall (V3 0 1 0), dvec3 0 0 1, dvec3 1 0 0)+ , (DTransform.rotateZ quarterTurn, Ref.Transform.rotateZ quarterTurn, dvec3 1 0 0, dvec3 0 1 0)+ , (axisQ (dvec3 0 0 1), axisQBall (V3 0 0 1), dvec3 1 0 0, dvec3 0 1 0)+ ]+ for_ cases \(t, tBall, input, expected) ->+ rotationsMatch toV3D (t DTransform.!.) (tBall Ref.Transform.!.) [(input, expected)]++prop_dtransform_node_order :: Property+prop_dtransform_node_order = withTests 1 $ property do+ let+ t = dvec3 2 3 5+ r = intrinsicComposedD 0 0 fourteenthTurn+ s = 11+ trsD = mconcat [DTransform.translateV t, DTransform.rotateQ r, DTransform.scaleV s]+ v = dvec3 0 0 1++ rBall = intrinsicComposedRef 0 0 fourteenthTurn+ nodeBall = Ref.Transform.node (V3 2 3 5) rBall 11 :: M44 (Ball Double)+ trsBall = trsRef (V3 2 3 5) rBall 11+ viaNodeBall = nodeBall Ref.Transform.!. V3 0 0 1+ viaTrsBall = trsBall Ref.Transform.!. V3 0 0 1+ replicate 3 Nothing === enclosed viaNodeBall (toV3D (DTransform.node t r s DTransform.!. v))+ replicate 3 Nothing === enclosed viaTrsBall (toV3D (trsD DTransform.!. v))+ replicate 3 Nothing === consistent viaNodeBall viaTrsBall++ let+ parent = DTransform.node (dvec3 4 5 6) (intrinsicComposedD 0 0 twelfthTurn) 2+ local = DTransform.node (dvec3 7 8 9) (intrinsicComposedD 0 twelfthTurn 0) (1/3)+ parentBall = Ref.Transform.node (V3 4 5 6) (intrinsicComposedRef 0 0 twelfthTurn) 2 :: M44 (Ball Double)+ localBall = Ref.Transform.node (V3 7 8 9) (intrinsicComposedRef 0 twelfthTurn 0) (1/3)+ precompBall = Ref.Mat4.compose parentBall localBall Ref.Transform.!. V3 0 0 1+ nocompBall = parentBall Ref.Transform.!. localBall Ref.Transform.!. V3 0 0 1+ replicate 3 Nothing === enclosed precompBall (toV3D (parent <> local DTransform.!. v))+ replicate 3 Nothing === enclosed nocompBall (toV3D (parent DTransform.!. local DTransform.!. v))+ replicate 3 Nothing === consistent precompBall nocompBall++prop_dtransform_float_parity :: Property+prop_dtransform_float_parity = withDiscards 1000 . withTests PROP_TESTS $ property do+ (_name, t) <- forAllWith fst genTransform+ Geomancy.Mat4.toListRowMajor t ===+ Geomancy.Mat4.toListRowMajor (DTransform.toTransform (DTransform.fromTransform t))++ angle <- forAll genAngle+ let+ a = realToFrac angle+ viaDouble = unTransform $ DTransform.toTransform (DTransform.rotateY a)+ viaFloat = unTransform $ Transform.rotateY angle+ viaDoubleBall = fmap (fmap narrow) $ Ref.Transform.rotateY (exactly a)+ viaFloatBall = Ref.Transform.rotateY (exactly angle)+ replicate 16 Nothing === enclosed (entries viaDoubleBall) (entries (toM44 viaDouble))+ replicate 16 Nothing === enclosed (entries viaFloatBall) (entries (toM44 viaFloat))+ replicate 16 Nothing === consistent (entries viaDoubleBall) (entries viaFloatBall)++prop_dtransform_big_world :: Property+prop_dtransform_big_world = withTests 1 $ property do+ let+ far = 1e9+ eye = dvec3 far 0 far+ view = DView.lookAtRH_ eye (eye + dvec3 0 0 1)+ model = DTransform.translate (far + 0.25) 0 (far + 5)+ composedInDouble = DTransform.toTransform (view <> model)+ composedInFloat = DTransform.toTransform view <> DTransform.toTransform model++ farBall = exactly far+ eyeBall = balls (toV3D eye)+ viewBall = Ref.Vulkan.lookAtRH_ eyeBall (eyeBall + V3 0 0 1)+ modelBall = Ref.Transform.translate (farBall + 0.25) 0 (farBall + 5)+ composedInDoubleBall = fmap (fmap narrow) $ Ref.Mat4.compose viewBall modelBall+ originBall = composedInDoubleBall Ref.Transform.!. V3 0 0 0+ replicate 3 Nothing === enclosed originBall (toV3 (composedInDouble !. vec3 0 0 0))+ replicate 3 Nothing === enclosed originBall (toV3 (vec3 0.25 0 5))+ withVec3 (composedInFloat !. vec3 0 0 0) \x _y _z ->+ diff x (/=) 0.25
+ test/Spec/DVec.hs view
@@ -0,0 +1,86 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}++module Spec.DVec (tests) where++import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Foreign (allocaBytes, peekByteOff, pokeByteOff)+import Graphics.Gl.Block qualified as Block++import Geomancy.DMat4 qualified+import Geomancy.DVec2 qualified+import Geomancy.DVec3 qualified+import Geomancy.DVec4 qualified+import Geomancy.Mat4 qualified++import Support.Gen+ ( forAllDTransform+ , forAllTransform+ , genDQuaternion+ , genDVec2+ , genDVec3+ , genDVec4+ , genVec2+ , genVec3+ , genVec4+ )+import Support.Property (pattern PROP_TESTS, storableRoundtrip)++tests :: TestTree+tests = testGroup "DVec"+ [ testPropertyNamed "convert_roundtrip" "prop_dvec_convert_roundtrip" prop_dvec_convert_roundtrip+ , testPropertyNamed "storable_roundtrip" "prop_dvec_storable_roundtrip" prop_dvec_storable_roundtrip+ , testPropertyNamed "dvec3_packed_write_bounds" "prop_dvec3_packed_write_bounds" prop_dvec3_packed_write_bounds+ ]++prop_dvec_convert_roundtrip :: Property+prop_dvec_convert_roundtrip = withDiscards 1000 . withTests PROP_TESTS $ property do+ v2 <- forAll genVec2+ v2 === Geomancy.DVec2.toVec2 (Geomancy.DVec2.fromVec2 v2)++ v3 <- forAll genVec3+ v3 === Geomancy.DVec3.toVec3 (Geomancy.DVec3.fromVec3 v3)++ v4 <- forAll genVec4+ v4 === Geomancy.DVec4.toVec4 (Geomancy.DVec4.fromVec4 v4)++ (m, _m) <- forAllTransform+ Geomancy.Mat4.toListRowMajor m ===+ Geomancy.Mat4.toListRowMajor (Geomancy.DMat4.toMat4 $ Geomancy.DMat4.fromMat4 m)++prop_dvec_storable_roundtrip :: Property+prop_dvec_storable_roundtrip = withDiscards 1000 . withTests PROP_TESTS $ property do+ d2 <- forAll genDVec2+ storableRoundtrip d2 >>= (d2 ===)++ d3 <- forAll genDVec3+ storableRoundtrip d3 >>= (d3 ===)++ let d3p = Geomancy.DVec3.Packed d3+ storableRoundtrip d3p >>= (d3p ===)++ d4 <- forAll genDVec4+ storableRoundtrip d4 >>= (d4 ===)++ (m, _m) <- forAllDTransform+ m' <- storableRoundtrip m+ Geomancy.DMat4.toListRowMajor m === Geomancy.DMat4.toListRowMajor m'++ dq <- forAll genDQuaternion+ storableRoundtrip dq >>= (dq ===)++prop_dvec3_packed_write_bounds :: Property+prop_dvec3_packed_write_bounds = withTests PROP_TESTS $ property do+ d3 <- forAll genDVec3+ let sentinel = 42 :: Double+ (d3', afterSlot) <- evalIO $ allocaBytes 32 \ptr -> do+ pokeByteOff ptr 24 sentinel+ pokeByteOff ptr 0 (Block.Packed d3)+ (,) <$> fmap Block.getPacked (peekByteOff ptr 0) <*> peekByteOff ptr 24+ d3 === d3'+ sentinel === afterSlot
+ test/Spec/Fusion.hs view
@@ -0,0 +1,258 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE OverloadedRecordDot #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}++module Spec.Fusion (tests) where++import Control.DeepSeq (NFData, force)+import Control.Concurrent (forkIO)+import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar)+import Control.Exception (SomeException, evaluate, throwIO, try)+import Data.Int (Int64)+import Data.List qualified as List+import Data.Word (Word32, Word64)+import GHC.Float (castDoubleToWord64, castFloatToWord32)+import Hedgehog+import System.Mem (getAllocationCounter)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Geomancy.DVec4 (DVec4, dvec4, withDVec4)+import Geomancy.DVec4 qualified as DVec4+import Geomancy.Swizzle ((.@))+import Geomancy.Vec4 (Vec4, vec4, withVec4)+import Geomancy.Vec4 qualified as Vec4++import Support.Gen (genDVec4, genDouble, genFloat, genVec4)+import Support.Property (pattern PROP_TESTS)++tests :: TestTree+tests = testGroup "Fusion"+ [ testPropertyNamed "vec4_bits" "prop_vec4_fusion_bits" prop_vec4_fusion_bits+ , testPropertyNamed "dvec4_bits" "prop_dvec4_fusion_bits" prop_dvec4_fusion_bits+ , testPropertyNamed "vec4_alloc" "prop_vec4_fusion_alloc" prop_vec4_fusion_alloc+ , testPropertyNamed "dvec4_alloc" "prop_dvec4_fusion_alloc" prop_dvec4_fusion_alloc+ ]++{-# NOINLINE unfused #-}+unfused :: a -> a+unfused x = x++bits4 :: Vec4 -> (Word32, Word32, Word32, Word32)+bits4 v = withVec4 v \x y z w ->+ (castFloatToWord32 x, castFloatToWord32 y, castFloatToWord32 z, castFloatToWord32 w)++dbits4 :: DVec4 -> (Word64, Word64, Word64, Word64)+dbits4 v = withDVec4 v \x y z w ->+ (castDoubleToWord64 x, castDoubleToWord64 y, castDoubleToWord64 z, castDoubleToWord64 w)++prop_vec4_fusion_bits :: Property+prop_vec4_fusion_bits = withTests PROP_TESTS $ property do+ t <- forAll genFloat+ a <- forAll genVec4+ b <- forAll genVec4+ c <- forAll genVec4+ d <- forAll genVec4+ bits4 (Vec4.lerp t a b) ===+ bits4 (unfused (unfused (a Vec4.^* t) + unfused (b Vec4.^* (1 - t))))+ bits4 ((a + b) * c - d) ===+ bits4 (unfused (unfused (unfused (a + b) * c) - d))+ castFloatToWord32 (Vec4.dot (a + b) c) ===+ castFloatToWord32 (Vec4.dot (unfused (a + b)) c)+ bits4 (Vec4.normalize (a + b)) ===+ bits4 (unfused (Vec4.normalize (unfused (a + b))))+ bits4 (sqrt (a * b)) ===+ bits4 (unfused (sqrt (unfused (a * b))))+ bits4 ((a + b) .@ #wzyx) ===+ bits4 (unfused (unfused (a + b) .@ #wzyx))+ castFloatToWord32 ((a + b).wzyx.wzyx.y + c.xyzz.w) ===+ castFloatToWord32 ((unfused (unfused (unfused (a + b)).wzyx).wzyx).y + (unfused c.xyzz).w)+ castFloatToWord32 ((a + b).wzyx.zyx.yx.y) ===+ castFloatToWord32 ((unfused (unfused (unfused (unfused (a + b)).wzyx).zyx).yx).y)+ bits4 ((a + b).xyz.xyz1 + c.xy.xy01) ===+ bits4 (unfused (unfused (unfused (a + b)).xyz).xyz1 + unfused (unfused c.xy).xy01)+ bits4 (a + b).yzw.xyz0.wxyz ===+ bits4 (withVec4 (unfused (a + b)) \_ y z w -> vec4 0 y z w)++prop_dvec4_fusion_bits :: Property+prop_dvec4_fusion_bits = withTests PROP_TESTS $ property do+ t <- forAll genDouble+ a <- forAll genDVec4+ b <- forAll genDVec4+ c <- forAll genDVec4+ d <- forAll genDVec4+ dbits4 (DVec4.lerp t a b) ===+ dbits4 (unfused (unfused (a DVec4.^* t) + unfused (b DVec4.^* (1 - t))))+ dbits4 ((a + b) * c - d) ===+ dbits4 (unfused (unfused (unfused (a + b) * c) - d))+ castDoubleToWord64 (DVec4.dot (a + b) c) ===+ castDoubleToWord64 (DVec4.dot (unfused (a + b)) c)+ dbits4 (DVec4.normalize (a + b)) ===+ dbits4 (unfused (DVec4.normalize (unfused (a + b))))+ dbits4 (sqrt (a * b)) ===+ dbits4 (unfused (sqrt (unfused (a * b))))+ castDoubleToWord64 ((a + b).wzyx.wzyx.y + c.xyzz.w) ===+ castDoubleToWord64 ((unfused (unfused (unfused (a + b)).wzyx).wzyx).y + (unfused c.xyzz).w)+ castDoubleToWord64 ((a + b).wzyx.zyx.yx.y) ===+ castDoubleToWord64 ((unfused (unfused (unfused (unfused (a + b)).wzyx).zyx).yx).y)+ dbits4 ((a + b).xyz.xyz1 + c.xy.xy01) ===+ dbits4 (unfused (unfused (unfused (a + b)).xyz).xyz1 + unfused (unfused c.xy).xy01)+ dbits4 (a + b).yzw.xyz0.wxyz ===+ dbits4 (withDVec4 (unfused (a + b)) \_ y z w -> dvec4 0 y z w)++samples :: Int+samples = 1000++scalarBudget :: Int64+scalarBudget = 1024++vectorBudget :: Int64 -> Int64+vectorBudget bytesPerVector = bytesPerVector * fromIntegral samples + scalarBudget++allocated :: (a -> b) -> a -> IO Int64+allocated f x = do+ result <- newEmptyMVar+ _ <- forkIO $ try (allocatedOnFreshStack f x) >>= putMVar result+ takeMVar result >>= either rethrow pure+ where+ rethrow :: SomeException -> IO Int64+ rethrow = throwIO++allocatedOnFreshStack :: (a -> b) -> a -> IO Int64+allocatedOnFreshStack f x = do+ before <- getAllocationCounter+ _ <- evaluate (f x)+ after <- getAllocationCounter+ pure (before - after)++inputs :: NFData v => (Float -> v) -> IO [v]+inputs mk = evaluate $ force+ [ mk (fromIntegral i / fromIntegral samples)+ | i <- [1 .. samples]+ ]++overBudget :: Int64 -> [(String, Int64)] -> [(String, Int64)]+overBudget budget = filter \(_name, bytes) -> bytes > budget++{-# NOINLINE plainFloatSum #-}+plainFloatSum :: [Float] -> Float+plainFloatSum = List.foldl' (+) 0++builtOptimized :: IO Bool+builtOptimized = do+ floats <- inputs id+ bytes <- allocated plainFloatSum floats+ pure $ bytes <= scalarBudget++whenBuiltOptimized :: PropertyT IO () -> PropertyT IO ()+whenBuiltOptimized checks = do+ optimized <- evalIO builtOptimized+ if optimized then+ checks+ else+ annotate "Skipped: allocation budgets only hold in optimized builds"++prop_vec4_fusion_alloc :: Property+prop_vec4_fusion_alloc = withTests 1 $ property $ whenBuiltOptimized do+ vs <- evalIO $ inputs \f -> vec4 f (f * 0.5) (f + 1) (2 - f)+ let+ b = vec4 1 2 3 4+ c = vec4 0.5 0.25 0.125 1+ d = vec4 3 2 1 0+ scalars <- evalIO $ traverse (traverse ($ vs))+ [ ("dot of sum", allocated (vec4DotSum b c))+ , ("normalize", allocated vec4NormalizeDot)+ , ("sqrt", allocated vec4SqrtDot)+ , ("swizzle read", allocated vec4SwizzleRead)+ , ("field swizzles", allocated vec4FieldSwizzles)+ , ("field extensions", allocated vec4FieldExtensions)+ ]+ vectors <- evalIO $ traverse (traverse ($ vs))+ [ ("lerp", allocated vec4Lerp)+ , ("chain", allocated (vec4Chain b c d))+ ]+ overBudget scalarBudget scalars ++ overBudget (vectorBudget 32) vectors === []++prop_dvec4_fusion_alloc :: Property+prop_dvec4_fusion_alloc = withTests 1 $ property $ whenBuiltOptimized do+ vs <- evalIO $ inputs \f ->+ let f' = realToFrac f in dvec4 f' (f' * 0.5) (f' + 1) (2 - f')+ let+ b = dvec4 1 2 3 4+ c = dvec4 0.5 0.25 0.125 1+ d = dvec4 3 2 1 0+ scalars <- evalIO $ traverse (traverse ($ vs))+ [ ("dot of sum", allocated (dvec4DotSum b c))+ , ("normalize", allocated dvec4NormalizeDot)+ , ("sqrt", allocated dvec4SqrtDot)+ , ("field swizzles", allocated dvec4FieldSwizzles)+ , ("field extensions", allocated dvec4FieldExtensions)+ ]+ vectors <- evalIO $ traverse (traverse ($ vs))+ [ ("lerp", allocated dvec4Lerp)+ , ("chain", allocated (dvec4Chain b c d))+ ]+ overBudget scalarBudget scalars ++ overBudget (vectorBudget 48) vectors === []++{-# NOINLINE vec4DotSum #-}+vec4DotSum :: Vec4 -> Vec4 -> [Vec4] -> Float+vec4DotSum b c = List.foldl' (\s v -> s + Vec4.dot (v + b) c) 0++{-# NOINLINE vec4NormalizeDot #-}+vec4NormalizeDot :: [Vec4] -> Float+vec4NormalizeDot = List.foldl' (\s v -> s + Vec4.dot (Vec4.normalize v) v) 0++{-# NOINLINE vec4SqrtDot #-}+vec4SqrtDot :: [Vec4] -> Float+vec4SqrtDot = List.foldl' (\s v -> s + Vec4.dot (sqrt v) v) 0++{-# NOINLINE vec4SwizzleRead #-}+vec4SwizzleRead :: [Vec4] -> Float+vec4SwizzleRead = List.foldl' (\s v -> s + withVec4 (v .@ #wzyx) \x _ _ _ -> x) 0++{-# NOINLINE vec4FieldSwizzles #-}+vec4FieldSwizzles :: [Vec4] -> Float+vec4FieldSwizzles = List.foldl' (\s v -> s + v.wzyx.wzyx.y + v.xyzz.w + v.wzyx.zyx.yx.y) 0++{-# NOINLINE vec4FieldExtensions #-}+vec4FieldExtensions :: [Vec4] -> Float+vec4FieldExtensions = List.foldl' (\s v -> s + Vec4.dot v.xyz.xyz1 v + Vec4.dot v.wz.xy01 v) 0++{-# NOINLINE vec4Lerp #-}+vec4Lerp :: [Vec4] -> Vec4+vec4Lerp = List.foldl' (\acc v -> Vec4.lerp 0.3 acc v) 0++{-# NOINLINE vec4Chain #-}+vec4Chain :: Vec4 -> Vec4 -> Vec4 -> [Vec4] -> Vec4+vec4Chain b c d = List.foldl' (\acc v -> acc + ((v + b) * c - d)) 0++{-# NOINLINE dvec4DotSum #-}+dvec4DotSum :: DVec4 -> DVec4 -> [DVec4] -> Double+dvec4DotSum b c = List.foldl' (\s v -> s + DVec4.dot (v + b) c) 0++{-# NOINLINE dvec4NormalizeDot #-}+dvec4NormalizeDot :: [DVec4] -> Double+dvec4NormalizeDot = List.foldl' (\s v -> s + DVec4.dot (DVec4.normalize v) v) 0++{-# NOINLINE dvec4SqrtDot #-}+dvec4SqrtDot :: [DVec4] -> Double+dvec4SqrtDot = List.foldl' (\s v -> s + DVec4.dot (sqrt v) v) 0++{-# NOINLINE dvec4FieldSwizzles #-}+dvec4FieldSwizzles :: [DVec4] -> Double+dvec4FieldSwizzles = List.foldl' (\s v -> s + v.wzyx.wzyx.y + v.xyzz.w + v.wzyx.zyx.yx.y) 0++{-# NOINLINE dvec4FieldExtensions #-}+dvec4FieldExtensions :: [DVec4] -> Double+dvec4FieldExtensions = List.foldl' (\s v -> s + DVec4.dot v.xyz.xyz1 v + DVec4.dot v.wz.xy01 v) 0++{-# NOINLINE dvec4Lerp #-}+dvec4Lerp :: [DVec4] -> DVec4+dvec4Lerp = List.foldl' (\acc v -> DVec4.lerp 0.3 acc v) 0++{-# NOINLINE dvec4Chain #-}+dvec4Chain :: DVec4 -> DVec4 -> DVec4 -> [DVec4] -> DVec4+dvec4Chain b c d = List.foldl' (\acc v -> acc + ((v + b) * c - d)) 0
+ test/Spec/Mat4.hs view
@@ -0,0 +1,88 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeApplications #-}++module Spec.Mat4 (tests) where++import Hedgehog+import Hedgehog.Gen qualified as Gen+import Hedgehog.Range qualified as Range+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Geomancy.Mat4 qualified+import Linear ((!*!))++import Support.Ball (balls44, consistent, enclosed)+import Support.Gen (forAllTransform, genEdgeScalar, genMostlySame)+import Support.Linear (entries, toM44)+import Support.Property (pattern PROP_TESTS)+import Support.Reference.Mat4 qualified as Ref.Mat4++tests :: TestTree+tests = testGroup "Mat4"+ [ testPropertyNamed "assoc" "prop_mat4_assoc" prop_mat4_assoc+ , testPropertyNamed "order" "prop_mat4_order" prop_mat4_order+ , testPropertyNamed "eq" "prop_mat4_eq" prop_mat4_eq+ ]++prop_mat4_assoc :: Property+prop_mat4_assoc = withDiscards 1000 . withTests PROP_TESTS $ property do+ (p, p_) <- forAllTransform+ (v, v_) <- forAllTransform+ (m, m_) <- forAllTransform++ let+ pv'm = (p <> v) <> m+ p'vm = p <> (v <> m)+ pv'mBall = Ref.Mat4.compose (Ref.Mat4.compose (balls44 p_) (balls44 v_)) (balls44 m_)+ p'vmBall = Ref.Mat4.compose (balls44 p_) (Ref.Mat4.compose (balls44 v_) (balls44 m_))+ replicate 16 Nothing === enclosed (entries pv'mBall) (entries (toM44 pv'm))+ replicate 16 Nothing === enclosed (entries p'vmBall) (entries (toM44 p'vm))++ let+ mv_p = (m_ !*! v_) !*! p_+ m_vp = m_ !*! (v_ !*! p_)+ mv_pBall = (balls44 m_ !*! balls44 v_) !*! balls44 p_+ m_vpBall = balls44 m_ !*! (balls44 v_ !*! balls44 p_)+ replicate 16 Nothing === enclosed (entries mv_pBall) (entries mv_p)+ replicate 16 Nothing === enclosed (entries m_vpBall) (entries m_vp)++ replicate 16 Nothing === consistent (entries pv'mBall) (entries p'vmBall)+ replicate 16 Nothing === consistent (entries mv_pBall) (entries m_vpBall)+ replicate 16 Nothing === consistent (entries pv'mBall) (entries mv_pBall)++prop_mat4_order :: Property+prop_mat4_order = withTests 1 $ property do+ let+ cm = Geomancy.Mat4.colMajor @Geomancy.Mat4.Mat4+ 0 1 2 3+ 4 5 6 7+ 8 9 0 1+ 2 3 4 5+ rm = Geomancy.Mat4.rowMajor @Geomancy.Mat4.Mat4+ 0 4 8 2+ 1 5 9 3+ 2 6 0 4+ 3 7 1 5+ Geomancy.Mat4.toListColMajor2d cm === Geomancy.Mat4.toListColMajor2d rm++ let+ cmT = Geomancy.Mat4.transpose cm+ rmT = Geomancy.Mat4.transpose rm+ Geomancy.Mat4.toListColMajor2d cmT === Geomancy.Mat4.toListColMajor2d rmT++prop_mat4_eq :: Property+prop_mat4_eq = withTests PROP_TESTS $ property do+ let+ four = Gen.list (Range.singleton 4)+ fromRows = evalMaybe . Geomancy.Mat4.fromRowMajor2d @[] @Geomancy.Mat4.Mat4+ rowsA <- forAll $ four (four genEdgeScalar)+ rowsB <- forAll $ traverse (traverse (genMostlySame 8)) rowsA+ a <- fromRows rowsA+ b <- fromRows rowsB+ label $ if rowsA == rowsB then "equal" else "different"+ (a == b) === (rowsA == rowsB)+ (a /= b) === (rowsA /= rowsB)
+ test/Spec/Point.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}++module Spec.Point (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Geomancy.Point qualified++tests :: TestTree+tests = testGroup "Point"+ [ testPropertyNamed "dpoint" "prop_dpoint" prop_dpoint+ ]++prop_dpoint :: Property+prop_dpoint = withTests 1 $ property do+ let+ far = 1e9+ a = Point (dvec3 far 0 0) :: DPoint3+ b = Point (dvec3 (far + 0.5) 0 0)+ 0.5 === Geomancy.Point.distance a b+ b === a .+^ dvec3 0.5 0 0+ dvec3 0.5 0 0 === b .-. a+ Point (dvec3 (far + 0.25) 0 0) === Geomancy.Point.lerp a b 0.5++ 5 === Geomancy.Point.distance (Point (vec3 0 0 0)) (Point (vec3 3 4 0))
+ test/Spec/Quaternion.hs view
@@ -0,0 +1,143 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}++module Spec.Quaternion (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Hedgehog.Gen qualified as Gen+import Hedgehog.Range qualified as Range+import Linear.Quaternion qualified++import Geomancy.Quaternion qualified+import Geomancy.Transform ((!.))+import Geomancy.Transform qualified as Transform++import Support.Ball (balls, consistent, enclosed, exactly)+import Support.Fixtures+ (intrinsicComposed, intrinsicComposedRef, quarterTurn, rotationsMatch, xNeg, xPos, yNeg, yPos, zNeg, zPos)+import Support.Gen (genAngle, genSmallVec3, genVec3)+import Support.Linear (toQ, toV3)+import Support.Reference.Linear qualified as Ref.Linear+import Support.Reference.Quaternion qualified as Ref.Quaternion+import Support.Reference.Transform qualified as Ref.Transform++tests :: TestTree+tests = testGroup "Quaternion"+ [ testPropertyNamed "ref" "prop_quaternion_ref" prop_quaternion_ref+ , testPropertyNamed "rotate_matrix" "prop_quaternion_rotate_matrix" prop_quaternion_rotate_matrix+ , testPropertyNamed "associativity" "prop_quaternion_associativity" prop_quaternion_associativity+ , testPropertyNamed "intrinsic" "prop_quaternion_intrinsic" prop_quaternion_intrinsic+ , testPropertyNamed "extrinsic" "prop_quaternion_extrinsic" prop_quaternion_extrinsic+ , testPropertyNamed "intrinsic_ref" "prop_quaternion_intrinsic_ref" prop_quaternion_intrinsic_ref+ ]++prop_quaternion_ref :: Property+prop_quaternion_ref = property do+ annotate "Construction"+ (axis, angle) <- forAll $ (,) <$> genVec3 <*> genAngle+ let qg = Geomancy.Quaternion.axisAngle axis angle+ let ql = Linear.Quaternion.axisAngle (toV3 axis) angle+ show (toQ qg) === show ql++ annotate "Rotation"+ p <- forAll genSmallVec3+ let+ rpg = Geomancy.Quaternion.rotate qg p+ rpl = Linear.Quaternion.rotate ql (toV3 p)+ rpgBall =+ Ref.Quaternion.rotate+ (Ref.Quaternion.axisAngle (balls (toV3 axis)) (exactly angle))+ (balls (toV3 p))+ rplBall =+ Ref.Linear.rotate+ (Linear.Quaternion.axisAngle (balls (toV3 axis)) (exactly angle))+ (balls (toV3 p))+ replicate 3 Nothing === enclosed rpgBall (toV3 rpg)+ replicate 3 Nothing === enclosed rplBall rpl+ replicate 3 Nothing === consistent rpgBall rplBall++ annotate "Multiplication"+ (axisB, angleB) <- forAll $ (,) <$> genVec3 <*> genAngle+ let qgB = Geomancy.Quaternion.axisAngle axisB angleB+ let qlB = Linear.Quaternion.axisAngle (toV3 axisB) angleB+ show (toQ (qg * qgB)) === show (ql * qlB)++prop_quaternion_rotate_matrix :: Property+prop_quaternion_rotate_matrix = property do+ q <- forAll $ quaternion <$> genUnitish <*> genUnitish <*> genUnitish <*> genUnitish+ p <- forAll genSmallVec3+ let+ viaRotate = Geomancy.Quaternion.rotate q p+ viaMatrix = Transform.rotateQ q !. p+ viaRotateBall = Ref.Quaternion.rotate (balls (toQ q)) (balls (toV3 p))+ viaMatrixBall = Ref.Transform.rotateQ (balls (toQ q)) Ref.Transform.!. balls (toV3 p)+ replicate 3 Nothing === enclosed viaRotateBall (toV3 viaRotate)+ replicate 3 Nothing === enclosed viaMatrixBall (toV3 viaMatrix)+ replicate 3 Nothing === consistent viaRotateBall viaMatrixBall+ where+ genUnitish = Gen.float (Range.linearFracFrom 0.0 (-1) 1)++prop_quaternion_associativity :: Property+prop_quaternion_associativity = property do+ (a, b, c) <- forAll $ (,,)+ <$> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)+ <*> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)+ <*> (Geomancy.Quaternion.axisAngle <$> genVec3 <*> genAngle)+ let ab'c = (a * b) * c+ annotateShow ab'c+ let a'bc = a * (b * c)+ annotateShow a'bc+ let+ aBall = balls (toQ a)+ bBall = balls (toQ b)+ cBall = balls (toQ c)+ ab'cBall = (aBall `Ref.Quaternion.multiply` bBall) `Ref.Quaternion.multiply` cBall+ a'bcBall = aBall `Ref.Quaternion.multiply` (bBall `Ref.Quaternion.multiply` cBall)+ replicate 4 Nothing === enclosed ab'cBall (toQ ab'c)+ replicate 4 Nothing === enclosed a'bcBall (toQ a'bc)+ replicate 4 Nothing === consistent ab'cBall a'bcBall++prop_quaternion_intrinsic :: Property+prop_quaternion_intrinsic = withTests 1 $ property do+ let+ q = Geomancy.Quaternion.intrinsic 0 quarterTurn quarterTurn+ qBall = Ref.Quaternion.intrinsic 0 quarterTurn quarterTurn+ rotationsMatch toV3+ (Geomancy.Quaternion.rotate q)+ (Ref.Quaternion.rotate qBall)+ [(zPos, yNeg), (xPos, zNeg), (yNeg, xNeg)]++prop_quaternion_extrinsic :: Property+prop_quaternion_extrinsic = withTests 1 $ property do+ let+ q = Geomancy.Quaternion.extrinsic quarterTurn quarterTurn 0+ qBall = Ref.Quaternion.extrinsic quarterTurn quarterTurn 0+ rotationsMatch toV3+ (Geomancy.Quaternion.rotate q)+ (Ref.Quaternion.rotate qBall)+ [(zPos, xPos), (xPos, yPos), (yNeg, zNeg)]++prop_quaternion_intrinsic_ref :: Property+prop_quaternion_intrinsic_ref = property do+ (roll, pitch, yaw) <- forAll $ (,,) <$> genAngle <*> genAngle <*> genAngle+ let fused = Geomancy.Quaternion.intrinsic roll pitch yaw+ annotateShow fused+ let composed = intrinsicComposed roll pitch yaw+ annotateShow composed+ let viaFused = Geomancy.Quaternion.rotate fused zPos+ annotateShow viaFused+ let viaComposed = Geomancy.Quaternion.rotate composed zPos+ let+ zPosBall = balls (toV3 zPos)+ viaFusedBall =+ Ref.Quaternion.rotate (Ref.Quaternion.intrinsic (exactly roll) (exactly pitch) (exactly yaw)) zPosBall+ viaComposedBall =+ Ref.Quaternion.rotate (intrinsicComposedRef (exactly roll) (exactly pitch) (exactly yaw)) zPosBall+ replicate 3 Nothing === enclosed viaFusedBall (toV3 viaFused)+ replicate 3 Nothing === enclosed viaComposedBall (toV3 viaComposed)+ replicate 3 Nothing === consistent viaFusedBall viaComposedBall
+ test/Spec/Storable.hs view
@@ -0,0 +1,87 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeApplications #-}++module Spec.Storable (tests) where++import Data.Proxy (Proxy(..))+import Data.Vector.Storable qualified as Storable+import Foreign (Storable)+import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Geomancy.DVec3 qualified+import Geomancy.IVec3 qualified+import Geomancy.UVec3 qualified+import Geomancy.Vec3 qualified++import Support.Gen (forAllDTransform, forAllTransform, genDVec4, genVec4)+import Support.Property (pattern PROP_TESTS, layout140)++tests :: TestTree+tests = testGroup "Storable"+ [ testPropertyNamed "vec4_strict_reads" "prop_vec4_strict_reads" prop_vec4_strict_reads+ , testPropertyNamed "dvec4_strict_reads" "prop_dvec4_strict_reads" prop_dvec4_strict_reads+ , testPropertyNamed "mat4_strict_reads" "prop_mat4_strict_reads" prop_mat4_strict_reads+ , testPropertyNamed "dmat4_strict_reads" "prop_dmat4_strict_reads" prop_dmat4_strict_reads+ , testPropertyNamed "block_layout" "prop_block_layout" prop_block_layout+ ]++prop_vec4_strict_reads :: Property+prop_vec4_strict_reads = withTests PROP_TESTS $ property do+ a <- forAll genVec4+ b <- forAll genVec4+ strictReads (Storable.fromList [a, b]) === (a, b)++prop_dvec4_strict_reads :: Property+prop_dvec4_strict_reads = withTests PROP_TESTS $ property do+ a <- forAll genDVec4+ b <- forAll genDVec4+ strictReads (Storable.fromList [a, b]) === (a, b)++prop_mat4_strict_reads :: Property+prop_mat4_strict_reads = withTests PROP_TESTS $ property do+ (a, _) <- forAllTransform+ (b, _) <- forAllTransform+ strictReads (Storable.fromList [a, b]) === (a, b)++prop_dmat4_strict_reads :: Property+prop_dmat4_strict_reads = withTests PROP_TESTS $ property do+ (a, _) <- forAllDTransform+ (b, _) <- forAllDTransform+ strictReads (Storable.fromList [a, b]) === (a, b)++prop_block_layout :: Property+prop_block_layout = withTests 1 $ property do+ (8, 8) === layout140 (Proxy @Vec2)+ (16, 16) === layout140 (Proxy @Vec3)+ (16, 12) === layout140 (Proxy @Geomancy.Vec3.Packed)+ (16, 16) === layout140 (Proxy @Vec4)+ (8, 8) === layout140 (Proxy @IVec2)+ (16, 16) === layout140 (Proxy @IVec3)+ (16, 12) === layout140 (Proxy @Geomancy.IVec3.Packed)+ (16, 16) === layout140 (Proxy @IVec4)+ (8, 8) === layout140 (Proxy @UVec2)+ (16, 16) === layout140 (Proxy @UVec3)+ (16, 12) === layout140 (Proxy @Geomancy.UVec3.Packed)+ (16, 16) === layout140 (Proxy @UVec4)+ (16, 16) === layout140 (Proxy @DVec2)+ (32, 32) === layout140 (Proxy @DVec3)+ (32, 24) === layout140 (Proxy @Geomancy.DVec3.Packed)+ (32, 32) === layout140 (Proxy @DVec4)+ (16, 16) === layout140 (Proxy @Quaternion)+ (32, 32) === layout140 (Proxy @DQuaternion)+ (16, 64) === layout140 (Proxy @Transform)+ (32, 128) === layout140 (Proxy @DTransform)++data Both a = Both !a !a++{-# INLINE strictReads #-}+strictReads :: Storable a => Storable.Vector a -> (a, a)+strictReads v =+ case Both (Storable.unsafeIndex v 0) (Storable.unsafeIndex v 1) of+ Both a b -> (a, b)
+ test/Spec/Swizzle.hs view
@@ -0,0 +1,3114 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeApplications #-}++module Spec.Swizzle (tests) where++import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Geomancy+import Geomancy.Swizzle ()++import Support.Gen (genDouble, genFloat, genInt32, genInt64, genWord32, genWord64)+import Support.Swizzle (Mismatch, swizzled, swizzles)++tests :: TestTree+tests = testGroup "Swizzle"+ [ testPropertyNamed "vec2" "prop_vec2_swizzles" $+ swizzles (vec2 <$> genFloat <*> genFloat) vec2Swizzles+ , testPropertyNamed "vec3" "prop_vec3_swizzles" $+ swizzles (vec3 <$> genFloat <*> genFloat <*> genFloat) vec3Swizzles+ , testPropertyNamed "vec4" "prop_vec4_swizzles" $+ swizzles (vec4 <$> genFloat <*> genFloat <*> genFloat <*> genFloat) vec4Swizzles+ , testPropertyNamed "dvec2" "prop_dvec2_swizzles" $+ swizzles (dvec2 <$> genDouble <*> genDouble) dvec2Swizzles+ , testPropertyNamed "dvec3" "prop_dvec3_swizzles" $+ swizzles (dvec3 <$> genDouble <*> genDouble <*> genDouble) dvec3Swizzles+ , testPropertyNamed "dvec4" "prop_dvec4_swizzles" $+ swizzles (dvec4 <$> genDouble <*> genDouble <*> genDouble <*> genDouble) dvec4Swizzles+ , testPropertyNamed "ivec2" "prop_ivec2_swizzles" $+ swizzles (ivec2 <$> genInt32 <*> genInt32) ivec2Swizzles+ , testPropertyNamed "ivec3" "prop_ivec3_swizzles" $+ swizzles (ivec3 <$> genInt32 <*> genInt32 <*> genInt32) ivec3Swizzles+ , testPropertyNamed "ivec4" "prop_ivec4_swizzles" $+ swizzles (ivec4 <$> genInt32 <*> genInt32 <*> genInt32 <*> genInt32) ivec4Swizzles+ , testPropertyNamed "uvec2" "prop_uvec2_swizzles" $+ swizzles (uvec2 <$> genWord32 <*> genWord32) uvec2Swizzles+ , testPropertyNamed "uvec3" "prop_uvec3_swizzles" $+ swizzles (uvec3 <$> genWord32 <*> genWord32 <*> genWord32) uvec3Swizzles+ , testPropertyNamed "uvec4" "prop_uvec4_swizzles" $+ swizzles (uvec4 <$> genWord32 <*> genWord32 <*> genWord32 <*> genWord32) uvec4Swizzles+ , testPropertyNamed "i64vec2" "prop_i64vec2_swizzles" $+ swizzles (i64vec2 <$> genInt64 <*> genInt64) i64vec2Swizzles+ , testPropertyNamed "i64vec3" "prop_i64vec3_swizzles" $+ swizzles (i64vec3 <$> genInt64 <*> genInt64 <*> genInt64) i64vec3Swizzles+ , testPropertyNamed "i64vec4" "prop_i64vec4_swizzles" $+ swizzles (i64vec4 <$> genInt64 <*> genInt64 <*> genInt64 <*> genInt64) i64vec4Swizzles+ , testPropertyNamed "u64vec2" "prop_u64vec2_swizzles" $+ swizzles (u64vec2 <$> genWord64 <*> genWord64) u64vec2Swizzles+ , testPropertyNamed "u64vec3" "prop_u64vec3_swizzles" $+ swizzles (u64vec3 <$> genWord64 <*> genWord64 <*> genWord64) u64vec3Swizzles+ , testPropertyNamed "u64vec4" "prop_u64vec4_swizzles" $+ swizzles (u64vec4 <$> genWord64 <*> genWord64 <*> genWord64 <*> genWord64) u64vec4Swizzles+ ]++vec2Swizzles :: Vec2 -> [Maybe Mismatch]+vec2Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"xy0" v+ , swizzled @"xy1" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"xy00" v+ , swizzled @"xy01" v+ , swizzled @"xy10" v+ , swizzled @"xy11" v+ ]++vec3Swizzles :: Vec3 -> [Maybe Mismatch]+vec3Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"xyz0" v+ , swizzled @"xyz1" v+ ]++vec4Swizzles :: Vec4 -> [Maybe Mismatch]+vec4Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"w" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"xw" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"yw" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"zw" v+ , swizzled @"wx" v+ , swizzled @"wy" v+ , swizzled @"wz" v+ , swizzled @"ww" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xxw" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xyw" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"xzw" v+ , swizzled @"xwx" v+ , swizzled @"xwy" v+ , swizzled @"xwz" v+ , swizzled @"xww" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yxw" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yyw" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"yzw" v+ , swizzled @"ywx" v+ , swizzled @"ywy" v+ , swizzled @"ywz" v+ , swizzled @"yww" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zxw" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zyw" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"zzw" v+ , swizzled @"zwx" v+ , swizzled @"zwy" v+ , swizzled @"zwz" v+ , swizzled @"zww" v+ , swizzled @"wxx" v+ , swizzled @"wxy" v+ , swizzled @"wxz" v+ , swizzled @"wxw" v+ , swizzled @"wyx" v+ , swizzled @"wyy" v+ , swizzled @"wyz" v+ , swizzled @"wyw" v+ , swizzled @"wzx" v+ , swizzled @"wzy" v+ , swizzled @"wzz" v+ , swizzled @"wzw" v+ , swizzled @"wwx" v+ , swizzled @"wwy" v+ , swizzled @"wwz" v+ , swizzled @"www" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxxw" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxyw" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xxzw" v+ , swizzled @"xxwx" v+ , swizzled @"xxwy" v+ , swizzled @"xxwz" v+ , swizzled @"xxww" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyxw" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyyw" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xyzw" v+ , swizzled @"xywx" v+ , swizzled @"xywy" v+ , swizzled @"xywz" v+ , swizzled @"xyww" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzxw" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzyw" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"xzzw" v+ , swizzled @"xzwx" v+ , swizzled @"xzwy" v+ , swizzled @"xzwz" v+ , swizzled @"xzww" v+ , swizzled @"xwxx" v+ , swizzled @"xwxy" v+ , swizzled @"xwxz" v+ , swizzled @"xwxw" v+ , swizzled @"xwyx" v+ , swizzled @"xwyy" v+ , swizzled @"xwyz" v+ , swizzled @"xwyw" v+ , swizzled @"xwzx" v+ , swizzled @"xwzy" v+ , swizzled @"xwzz" v+ , swizzled @"xwzw" v+ , swizzled @"xwwx" v+ , swizzled @"xwwy" v+ , swizzled @"xwwz" v+ , swizzled @"xwww" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxxw" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxyw" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yxzw" v+ , swizzled @"yxwx" v+ , swizzled @"yxwy" v+ , swizzled @"yxwz" v+ , swizzled @"yxww" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyxw" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyyw" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yyzw" v+ , swizzled @"yywx" v+ , swizzled @"yywy" v+ , swizzled @"yywz" v+ , swizzled @"yyww" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzxw" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzyw" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"yzzw" v+ , swizzled @"yzwx" v+ , swizzled @"yzwy" v+ , swizzled @"yzwz" v+ , swizzled @"yzww" v+ , swizzled @"ywxx" v+ , swizzled @"ywxy" v+ , swizzled @"ywxz" v+ , swizzled @"ywxw" v+ , swizzled @"ywyx" v+ , swizzled @"ywyy" v+ , swizzled @"ywyz" v+ , swizzled @"ywyw" v+ , swizzled @"ywzx" v+ , swizzled @"ywzy" v+ , swizzled @"ywzz" v+ , swizzled @"ywzw" v+ , swizzled @"ywwx" v+ , swizzled @"ywwy" v+ , swizzled @"ywwz" v+ , swizzled @"ywww" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxxw" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxyw" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zxzw" v+ , swizzled @"zxwx" v+ , swizzled @"zxwy" v+ , swizzled @"zxwz" v+ , swizzled @"zxww" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyxw" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyyw" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zyzw" v+ , swizzled @"zywx" v+ , swizzled @"zywy" v+ , swizzled @"zywz" v+ , swizzled @"zyww" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzxw" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzyw" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"zzzw" v+ , swizzled @"zzwx" v+ , swizzled @"zzwy" v+ , swizzled @"zzwz" v+ , swizzled @"zzww" v+ , swizzled @"zwxx" v+ , swizzled @"zwxy" v+ , swizzled @"zwxz" v+ , swizzled @"zwxw" v+ , swizzled @"zwyx" v+ , swizzled @"zwyy" v+ , swizzled @"zwyz" v+ , swizzled @"zwyw" v+ , swizzled @"zwzx" v+ , swizzled @"zwzy" v+ , swizzled @"zwzz" v+ , swizzled @"zwzw" v+ , swizzled @"zwwx" v+ , swizzled @"zwwy" v+ , swizzled @"zwwz" v+ , swizzled @"zwww" v+ , swizzled @"wxxx" v+ , swizzled @"wxxy" v+ , swizzled @"wxxz" v+ , swizzled @"wxxw" v+ , swizzled @"wxyx" v+ , swizzled @"wxyy" v+ , swizzled @"wxyz" v+ , swizzled @"wxyw" v+ , swizzled @"wxzx" v+ , swizzled @"wxzy" v+ , swizzled @"wxzz" v+ , swizzled @"wxzw" v+ , swizzled @"wxwx" v+ , swizzled @"wxwy" v+ , swizzled @"wxwz" v+ , swizzled @"wxww" v+ , swizzled @"wyxx" v+ , swizzled @"wyxy" v+ , swizzled @"wyxz" v+ , swizzled @"wyxw" v+ , swizzled @"wyyx" v+ , swizzled @"wyyy" v+ , swizzled @"wyyz" v+ , swizzled @"wyyw" v+ , swizzled @"wyzx" v+ , swizzled @"wyzy" v+ , swizzled @"wyzz" v+ , swizzled @"wyzw" v+ , swizzled @"wywx" v+ , swizzled @"wywy" v+ , swizzled @"wywz" v+ , swizzled @"wyww" v+ , swizzled @"wzxx" v+ , swizzled @"wzxy" v+ , swizzled @"wzxz" v+ , swizzled @"wzxw" v+ , swizzled @"wzyx" v+ , swizzled @"wzyy" v+ , swizzled @"wzyz" v+ , swizzled @"wzyw" v+ , swizzled @"wzzx" v+ , swizzled @"wzzy" v+ , swizzled @"wzzz" v+ , swizzled @"wzzw" v+ , swizzled @"wzwx" v+ , swizzled @"wzwy" v+ , swizzled @"wzwz" v+ , swizzled @"wzww" v+ , swizzled @"wwxx" v+ , swizzled @"wwxy" v+ , swizzled @"wwxz" v+ , swizzled @"wwxw" v+ , swizzled @"wwyx" v+ , swizzled @"wwyy" v+ , swizzled @"wwyz" v+ , swizzled @"wwyw" v+ , swizzled @"wwzx" v+ , swizzled @"wwzy" v+ , swizzled @"wwzz" v+ , swizzled @"wwzw" v+ , swizzled @"wwwx" v+ , swizzled @"wwwy" v+ , swizzled @"wwwz" v+ , swizzled @"wwww" v+ ]++dvec2Swizzles :: DVec2 -> [Maybe Mismatch]+dvec2Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"xy0" v+ , swizzled @"xy1" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"xy00" v+ , swizzled @"xy01" v+ , swizzled @"xy10" v+ , swizzled @"xy11" v+ ]++dvec3Swizzles :: DVec3 -> [Maybe Mismatch]+dvec3Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"xyz0" v+ , swizzled @"xyz1" v+ ]++dvec4Swizzles :: DVec4 -> [Maybe Mismatch]+dvec4Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"w" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"xw" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"yw" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"zw" v+ , swizzled @"wx" v+ , swizzled @"wy" v+ , swizzled @"wz" v+ , swizzled @"ww" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xxw" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xyw" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"xzw" v+ , swizzled @"xwx" v+ , swizzled @"xwy" v+ , swizzled @"xwz" v+ , swizzled @"xww" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yxw" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yyw" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"yzw" v+ , swizzled @"ywx" v+ , swizzled @"ywy" v+ , swizzled @"ywz" v+ , swizzled @"yww" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zxw" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zyw" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"zzw" v+ , swizzled @"zwx" v+ , swizzled @"zwy" v+ , swizzled @"zwz" v+ , swizzled @"zww" v+ , swizzled @"wxx" v+ , swizzled @"wxy" v+ , swizzled @"wxz" v+ , swizzled @"wxw" v+ , swizzled @"wyx" v+ , swizzled @"wyy" v+ , swizzled @"wyz" v+ , swizzled @"wyw" v+ , swizzled @"wzx" v+ , swizzled @"wzy" v+ , swizzled @"wzz" v+ , swizzled @"wzw" v+ , swizzled @"wwx" v+ , swizzled @"wwy" v+ , swizzled @"wwz" v+ , swizzled @"www" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxxw" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxyw" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xxzw" v+ , swizzled @"xxwx" v+ , swizzled @"xxwy" v+ , swizzled @"xxwz" v+ , swizzled @"xxww" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyxw" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyyw" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xyzw" v+ , swizzled @"xywx" v+ , swizzled @"xywy" v+ , swizzled @"xywz" v+ , swizzled @"xyww" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzxw" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzyw" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"xzzw" v+ , swizzled @"xzwx" v+ , swizzled @"xzwy" v+ , swizzled @"xzwz" v+ , swizzled @"xzww" v+ , swizzled @"xwxx" v+ , swizzled @"xwxy" v+ , swizzled @"xwxz" v+ , swizzled @"xwxw" v+ , swizzled @"xwyx" v+ , swizzled @"xwyy" v+ , swizzled @"xwyz" v+ , swizzled @"xwyw" v+ , swizzled @"xwzx" v+ , swizzled @"xwzy" v+ , swizzled @"xwzz" v+ , swizzled @"xwzw" v+ , swizzled @"xwwx" v+ , swizzled @"xwwy" v+ , swizzled @"xwwz" v+ , swizzled @"xwww" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxxw" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxyw" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yxzw" v+ , swizzled @"yxwx" v+ , swizzled @"yxwy" v+ , swizzled @"yxwz" v+ , swizzled @"yxww" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyxw" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyyw" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yyzw" v+ , swizzled @"yywx" v+ , swizzled @"yywy" v+ , swizzled @"yywz" v+ , swizzled @"yyww" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzxw" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzyw" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"yzzw" v+ , swizzled @"yzwx" v+ , swizzled @"yzwy" v+ , swizzled @"yzwz" v+ , swizzled @"yzww" v+ , swizzled @"ywxx" v+ , swizzled @"ywxy" v+ , swizzled @"ywxz" v+ , swizzled @"ywxw" v+ , swizzled @"ywyx" v+ , swizzled @"ywyy" v+ , swizzled @"ywyz" v+ , swizzled @"ywyw" v+ , swizzled @"ywzx" v+ , swizzled @"ywzy" v+ , swizzled @"ywzz" v+ , swizzled @"ywzw" v+ , swizzled @"ywwx" v+ , swizzled @"ywwy" v+ , swizzled @"ywwz" v+ , swizzled @"ywww" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxxw" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxyw" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zxzw" v+ , swizzled @"zxwx" v+ , swizzled @"zxwy" v+ , swizzled @"zxwz" v+ , swizzled @"zxww" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyxw" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyyw" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zyzw" v+ , swizzled @"zywx" v+ , swizzled @"zywy" v+ , swizzled @"zywz" v+ , swizzled @"zyww" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzxw" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzyw" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"zzzw" v+ , swizzled @"zzwx" v+ , swizzled @"zzwy" v+ , swizzled @"zzwz" v+ , swizzled @"zzww" v+ , swizzled @"zwxx" v+ , swizzled @"zwxy" v+ , swizzled @"zwxz" v+ , swizzled @"zwxw" v+ , swizzled @"zwyx" v+ , swizzled @"zwyy" v+ , swizzled @"zwyz" v+ , swizzled @"zwyw" v+ , swizzled @"zwzx" v+ , swizzled @"zwzy" v+ , swizzled @"zwzz" v+ , swizzled @"zwzw" v+ , swizzled @"zwwx" v+ , swizzled @"zwwy" v+ , swizzled @"zwwz" v+ , swizzled @"zwww" v+ , swizzled @"wxxx" v+ , swizzled @"wxxy" v+ , swizzled @"wxxz" v+ , swizzled @"wxxw" v+ , swizzled @"wxyx" v+ , swizzled @"wxyy" v+ , swizzled @"wxyz" v+ , swizzled @"wxyw" v+ , swizzled @"wxzx" v+ , swizzled @"wxzy" v+ , swizzled @"wxzz" v+ , swizzled @"wxzw" v+ , swizzled @"wxwx" v+ , swizzled @"wxwy" v+ , swizzled @"wxwz" v+ , swizzled @"wxww" v+ , swizzled @"wyxx" v+ , swizzled @"wyxy" v+ , swizzled @"wyxz" v+ , swizzled @"wyxw" v+ , swizzled @"wyyx" v+ , swizzled @"wyyy" v+ , swizzled @"wyyz" v+ , swizzled @"wyyw" v+ , swizzled @"wyzx" v+ , swizzled @"wyzy" v+ , swizzled @"wyzz" v+ , swizzled @"wyzw" v+ , swizzled @"wywx" v+ , swizzled @"wywy" v+ , swizzled @"wywz" v+ , swizzled @"wyww" v+ , swizzled @"wzxx" v+ , swizzled @"wzxy" v+ , swizzled @"wzxz" v+ , swizzled @"wzxw" v+ , swizzled @"wzyx" v+ , swizzled @"wzyy" v+ , swizzled @"wzyz" v+ , swizzled @"wzyw" v+ , swizzled @"wzzx" v+ , swizzled @"wzzy" v+ , swizzled @"wzzz" v+ , swizzled @"wzzw" v+ , swizzled @"wzwx" v+ , swizzled @"wzwy" v+ , swizzled @"wzwz" v+ , swizzled @"wzww" v+ , swizzled @"wwxx" v+ , swizzled @"wwxy" v+ , swizzled @"wwxz" v+ , swizzled @"wwxw" v+ , swizzled @"wwyx" v+ , swizzled @"wwyy" v+ , swizzled @"wwyz" v+ , swizzled @"wwyw" v+ , swizzled @"wwzx" v+ , swizzled @"wwzy" v+ , swizzled @"wwzz" v+ , swizzled @"wwzw" v+ , swizzled @"wwwx" v+ , swizzled @"wwwy" v+ , swizzled @"wwwz" v+ , swizzled @"wwww" v+ ]++ivec2Swizzles :: IVec2 -> [Maybe Mismatch]+ivec2Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"xy0" v+ , swizzled @"xy1" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"xy00" v+ , swizzled @"xy01" v+ , swizzled @"xy10" v+ , swizzled @"xy11" v+ ]++ivec3Swizzles :: IVec3 -> [Maybe Mismatch]+ivec3Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"xyz0" v+ , swizzled @"xyz1" v+ ]++ivec4Swizzles :: IVec4 -> [Maybe Mismatch]+ivec4Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"w" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"xw" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"yw" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"zw" v+ , swizzled @"wx" v+ , swizzled @"wy" v+ , swizzled @"wz" v+ , swizzled @"ww" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xxw" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xyw" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"xzw" v+ , swizzled @"xwx" v+ , swizzled @"xwy" v+ , swizzled @"xwz" v+ , swizzled @"xww" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yxw" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yyw" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"yzw" v+ , swizzled @"ywx" v+ , swizzled @"ywy" v+ , swizzled @"ywz" v+ , swizzled @"yww" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zxw" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zyw" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"zzw" v+ , swizzled @"zwx" v+ , swizzled @"zwy" v+ , swizzled @"zwz" v+ , swizzled @"zww" v+ , swizzled @"wxx" v+ , swizzled @"wxy" v+ , swizzled @"wxz" v+ , swizzled @"wxw" v+ , swizzled @"wyx" v+ , swizzled @"wyy" v+ , swizzled @"wyz" v+ , swizzled @"wyw" v+ , swizzled @"wzx" v+ , swizzled @"wzy" v+ , swizzled @"wzz" v+ , swizzled @"wzw" v+ , swizzled @"wwx" v+ , swizzled @"wwy" v+ , swizzled @"wwz" v+ , swizzled @"www" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxxw" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxyw" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xxzw" v+ , swizzled @"xxwx" v+ , swizzled @"xxwy" v+ , swizzled @"xxwz" v+ , swizzled @"xxww" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyxw" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyyw" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xyzw" v+ , swizzled @"xywx" v+ , swizzled @"xywy" v+ , swizzled @"xywz" v+ , swizzled @"xyww" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzxw" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzyw" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"xzzw" v+ , swizzled @"xzwx" v+ , swizzled @"xzwy" v+ , swizzled @"xzwz" v+ , swizzled @"xzww" v+ , swizzled @"xwxx" v+ , swizzled @"xwxy" v+ , swizzled @"xwxz" v+ , swizzled @"xwxw" v+ , swizzled @"xwyx" v+ , swizzled @"xwyy" v+ , swizzled @"xwyz" v+ , swizzled @"xwyw" v+ , swizzled @"xwzx" v+ , swizzled @"xwzy" v+ , swizzled @"xwzz" v+ , swizzled @"xwzw" v+ , swizzled @"xwwx" v+ , swizzled @"xwwy" v+ , swizzled @"xwwz" v+ , swizzled @"xwww" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxxw" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxyw" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yxzw" v+ , swizzled @"yxwx" v+ , swizzled @"yxwy" v+ , swizzled @"yxwz" v+ , swizzled @"yxww" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyxw" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyyw" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yyzw" v+ , swizzled @"yywx" v+ , swizzled @"yywy" v+ , swizzled @"yywz" v+ , swizzled @"yyww" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzxw" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzyw" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"yzzw" v+ , swizzled @"yzwx" v+ , swizzled @"yzwy" v+ , swizzled @"yzwz" v+ , swizzled @"yzww" v+ , swizzled @"ywxx" v+ , swizzled @"ywxy" v+ , swizzled @"ywxz" v+ , swizzled @"ywxw" v+ , swizzled @"ywyx" v+ , swizzled @"ywyy" v+ , swizzled @"ywyz" v+ , swizzled @"ywyw" v+ , swizzled @"ywzx" v+ , swizzled @"ywzy" v+ , swizzled @"ywzz" v+ , swizzled @"ywzw" v+ , swizzled @"ywwx" v+ , swizzled @"ywwy" v+ , swizzled @"ywwz" v+ , swizzled @"ywww" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxxw" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxyw" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zxzw" v+ , swizzled @"zxwx" v+ , swizzled @"zxwy" v+ , swizzled @"zxwz" v+ , swizzled @"zxww" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyxw" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyyw" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zyzw" v+ , swizzled @"zywx" v+ , swizzled @"zywy" v+ , swizzled @"zywz" v+ , swizzled @"zyww" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzxw" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzyw" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"zzzw" v+ , swizzled @"zzwx" v+ , swizzled @"zzwy" v+ , swizzled @"zzwz" v+ , swizzled @"zzww" v+ , swizzled @"zwxx" v+ , swizzled @"zwxy" v+ , swizzled @"zwxz" v+ , swizzled @"zwxw" v+ , swizzled @"zwyx" v+ , swizzled @"zwyy" v+ , swizzled @"zwyz" v+ , swizzled @"zwyw" v+ , swizzled @"zwzx" v+ , swizzled @"zwzy" v+ , swizzled @"zwzz" v+ , swizzled @"zwzw" v+ , swizzled @"zwwx" v+ , swizzled @"zwwy" v+ , swizzled @"zwwz" v+ , swizzled @"zwww" v+ , swizzled @"wxxx" v+ , swizzled @"wxxy" v+ , swizzled @"wxxz" v+ , swizzled @"wxxw" v+ , swizzled @"wxyx" v+ , swizzled @"wxyy" v+ , swizzled @"wxyz" v+ , swizzled @"wxyw" v+ , swizzled @"wxzx" v+ , swizzled @"wxzy" v+ , swizzled @"wxzz" v+ , swizzled @"wxzw" v+ , swizzled @"wxwx" v+ , swizzled @"wxwy" v+ , swizzled @"wxwz" v+ , swizzled @"wxww" v+ , swizzled @"wyxx" v+ , swizzled @"wyxy" v+ , swizzled @"wyxz" v+ , swizzled @"wyxw" v+ , swizzled @"wyyx" v+ , swizzled @"wyyy" v+ , swizzled @"wyyz" v+ , swizzled @"wyyw" v+ , swizzled @"wyzx" v+ , swizzled @"wyzy" v+ , swizzled @"wyzz" v+ , swizzled @"wyzw" v+ , swizzled @"wywx" v+ , swizzled @"wywy" v+ , swizzled @"wywz" v+ , swizzled @"wyww" v+ , swizzled @"wzxx" v+ , swizzled @"wzxy" v+ , swizzled @"wzxz" v+ , swizzled @"wzxw" v+ , swizzled @"wzyx" v+ , swizzled @"wzyy" v+ , swizzled @"wzyz" v+ , swizzled @"wzyw" v+ , swizzled @"wzzx" v+ , swizzled @"wzzy" v+ , swizzled @"wzzz" v+ , swizzled @"wzzw" v+ , swizzled @"wzwx" v+ , swizzled @"wzwy" v+ , swizzled @"wzwz" v+ , swizzled @"wzww" v+ , swizzled @"wwxx" v+ , swizzled @"wwxy" v+ , swizzled @"wwxz" v+ , swizzled @"wwxw" v+ , swizzled @"wwyx" v+ , swizzled @"wwyy" v+ , swizzled @"wwyz" v+ , swizzled @"wwyw" v+ , swizzled @"wwzx" v+ , swizzled @"wwzy" v+ , swizzled @"wwzz" v+ , swizzled @"wwzw" v+ , swizzled @"wwwx" v+ , swizzled @"wwwy" v+ , swizzled @"wwwz" v+ , swizzled @"wwww" v+ ]++uvec2Swizzles :: UVec2 -> [Maybe Mismatch]+uvec2Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"xy0" v+ , swizzled @"xy1" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"xy00" v+ , swizzled @"xy01" v+ , swizzled @"xy10" v+ , swizzled @"xy11" v+ ]++uvec3Swizzles :: UVec3 -> [Maybe Mismatch]+uvec3Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"xyz0" v+ , swizzled @"xyz1" v+ ]++uvec4Swizzles :: UVec4 -> [Maybe Mismatch]+uvec4Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"w" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"xw" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"yw" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"zw" v+ , swizzled @"wx" v+ , swizzled @"wy" v+ , swizzled @"wz" v+ , swizzled @"ww" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xxw" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xyw" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"xzw" v+ , swizzled @"xwx" v+ , swizzled @"xwy" v+ , swizzled @"xwz" v+ , swizzled @"xww" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yxw" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yyw" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"yzw" v+ , swizzled @"ywx" v+ , swizzled @"ywy" v+ , swizzled @"ywz" v+ , swizzled @"yww" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zxw" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zyw" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"zzw" v+ , swizzled @"zwx" v+ , swizzled @"zwy" v+ , swizzled @"zwz" v+ , swizzled @"zww" v+ , swizzled @"wxx" v+ , swizzled @"wxy" v+ , swizzled @"wxz" v+ , swizzled @"wxw" v+ , swizzled @"wyx" v+ , swizzled @"wyy" v+ , swizzled @"wyz" v+ , swizzled @"wyw" v+ , swizzled @"wzx" v+ , swizzled @"wzy" v+ , swizzled @"wzz" v+ , swizzled @"wzw" v+ , swizzled @"wwx" v+ , swizzled @"wwy" v+ , swizzled @"wwz" v+ , swizzled @"www" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxxw" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxyw" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xxzw" v+ , swizzled @"xxwx" v+ , swizzled @"xxwy" v+ , swizzled @"xxwz" v+ , swizzled @"xxww" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyxw" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyyw" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xyzw" v+ , swizzled @"xywx" v+ , swizzled @"xywy" v+ , swizzled @"xywz" v+ , swizzled @"xyww" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzxw" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzyw" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"xzzw" v+ , swizzled @"xzwx" v+ , swizzled @"xzwy" v+ , swizzled @"xzwz" v+ , swizzled @"xzww" v+ , swizzled @"xwxx" v+ , swizzled @"xwxy" v+ , swizzled @"xwxz" v+ , swizzled @"xwxw" v+ , swizzled @"xwyx" v+ , swizzled @"xwyy" v+ , swizzled @"xwyz" v+ , swizzled @"xwyw" v+ , swizzled @"xwzx" v+ , swizzled @"xwzy" v+ , swizzled @"xwzz" v+ , swizzled @"xwzw" v+ , swizzled @"xwwx" v+ , swizzled @"xwwy" v+ , swizzled @"xwwz" v+ , swizzled @"xwww" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxxw" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxyw" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yxzw" v+ , swizzled @"yxwx" v+ , swizzled @"yxwy" v+ , swizzled @"yxwz" v+ , swizzled @"yxww" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyxw" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyyw" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yyzw" v+ , swizzled @"yywx" v+ , swizzled @"yywy" v+ , swizzled @"yywz" v+ , swizzled @"yyww" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzxw" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzyw" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"yzzw" v+ , swizzled @"yzwx" v+ , swizzled @"yzwy" v+ , swizzled @"yzwz" v+ , swizzled @"yzww" v+ , swizzled @"ywxx" v+ , swizzled @"ywxy" v+ , swizzled @"ywxz" v+ , swizzled @"ywxw" v+ , swizzled @"ywyx" v+ , swizzled @"ywyy" v+ , swizzled @"ywyz" v+ , swizzled @"ywyw" v+ , swizzled @"ywzx" v+ , swizzled @"ywzy" v+ , swizzled @"ywzz" v+ , swizzled @"ywzw" v+ , swizzled @"ywwx" v+ , swizzled @"ywwy" v+ , swizzled @"ywwz" v+ , swizzled @"ywww" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxxw" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxyw" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zxzw" v+ , swizzled @"zxwx" v+ , swizzled @"zxwy" v+ , swizzled @"zxwz" v+ , swizzled @"zxww" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyxw" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyyw" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zyzw" v+ , swizzled @"zywx" v+ , swizzled @"zywy" v+ , swizzled @"zywz" v+ , swizzled @"zyww" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzxw" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzyw" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"zzzw" v+ , swizzled @"zzwx" v+ , swizzled @"zzwy" v+ , swizzled @"zzwz" v+ , swizzled @"zzww" v+ , swizzled @"zwxx" v+ , swizzled @"zwxy" v+ , swizzled @"zwxz" v+ , swizzled @"zwxw" v+ , swizzled @"zwyx" v+ , swizzled @"zwyy" v+ , swizzled @"zwyz" v+ , swizzled @"zwyw" v+ , swizzled @"zwzx" v+ , swizzled @"zwzy" v+ , swizzled @"zwzz" v+ , swizzled @"zwzw" v+ , swizzled @"zwwx" v+ , swizzled @"zwwy" v+ , swizzled @"zwwz" v+ , swizzled @"zwww" v+ , swizzled @"wxxx" v+ , swizzled @"wxxy" v+ , swizzled @"wxxz" v+ , swizzled @"wxxw" v+ , swizzled @"wxyx" v+ , swizzled @"wxyy" v+ , swizzled @"wxyz" v+ , swizzled @"wxyw" v+ , swizzled @"wxzx" v+ , swizzled @"wxzy" v+ , swizzled @"wxzz" v+ , swizzled @"wxzw" v+ , swizzled @"wxwx" v+ , swizzled @"wxwy" v+ , swizzled @"wxwz" v+ , swizzled @"wxww" v+ , swizzled @"wyxx" v+ , swizzled @"wyxy" v+ , swizzled @"wyxz" v+ , swizzled @"wyxw" v+ , swizzled @"wyyx" v+ , swizzled @"wyyy" v+ , swizzled @"wyyz" v+ , swizzled @"wyyw" v+ , swizzled @"wyzx" v+ , swizzled @"wyzy" v+ , swizzled @"wyzz" v+ , swizzled @"wyzw" v+ , swizzled @"wywx" v+ , swizzled @"wywy" v+ , swizzled @"wywz" v+ , swizzled @"wyww" v+ , swizzled @"wzxx" v+ , swizzled @"wzxy" v+ , swizzled @"wzxz" v+ , swizzled @"wzxw" v+ , swizzled @"wzyx" v+ , swizzled @"wzyy" v+ , swizzled @"wzyz" v+ , swizzled @"wzyw" v+ , swizzled @"wzzx" v+ , swizzled @"wzzy" v+ , swizzled @"wzzz" v+ , swizzled @"wzzw" v+ , swizzled @"wzwx" v+ , swizzled @"wzwy" v+ , swizzled @"wzwz" v+ , swizzled @"wzww" v+ , swizzled @"wwxx" v+ , swizzled @"wwxy" v+ , swizzled @"wwxz" v+ , swizzled @"wwxw" v+ , swizzled @"wwyx" v+ , swizzled @"wwyy" v+ , swizzled @"wwyz" v+ , swizzled @"wwyw" v+ , swizzled @"wwzx" v+ , swizzled @"wwzy" v+ , swizzled @"wwzz" v+ , swizzled @"wwzw" v+ , swizzled @"wwwx" v+ , swizzled @"wwwy" v+ , swizzled @"wwwz" v+ , swizzled @"wwww" v+ ]++i64vec2Swizzles :: I64Vec2 -> [Maybe Mismatch]+i64vec2Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"xy0" v+ , swizzled @"xy1" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"xy00" v+ , swizzled @"xy01" v+ , swizzled @"xy10" v+ , swizzled @"xy11" v+ ]++i64vec3Swizzles :: I64Vec3 -> [Maybe Mismatch]+i64vec3Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"xyz0" v+ , swizzled @"xyz1" v+ ]++i64vec4Swizzles :: I64Vec4 -> [Maybe Mismatch]+i64vec4Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"w" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"xw" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"yw" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"zw" v+ , swizzled @"wx" v+ , swizzled @"wy" v+ , swizzled @"wz" v+ , swizzled @"ww" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xxw" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xyw" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"xzw" v+ , swizzled @"xwx" v+ , swizzled @"xwy" v+ , swizzled @"xwz" v+ , swizzled @"xww" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yxw" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yyw" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"yzw" v+ , swizzled @"ywx" v+ , swizzled @"ywy" v+ , swizzled @"ywz" v+ , swizzled @"yww" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zxw" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zyw" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"zzw" v+ , swizzled @"zwx" v+ , swizzled @"zwy" v+ , swizzled @"zwz" v+ , swizzled @"zww" v+ , swizzled @"wxx" v+ , swizzled @"wxy" v+ , swizzled @"wxz" v+ , swizzled @"wxw" v+ , swizzled @"wyx" v+ , swizzled @"wyy" v+ , swizzled @"wyz" v+ , swizzled @"wyw" v+ , swizzled @"wzx" v+ , swizzled @"wzy" v+ , swizzled @"wzz" v+ , swizzled @"wzw" v+ , swizzled @"wwx" v+ , swizzled @"wwy" v+ , swizzled @"wwz" v+ , swizzled @"www" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxxw" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxyw" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xxzw" v+ , swizzled @"xxwx" v+ , swizzled @"xxwy" v+ , swizzled @"xxwz" v+ , swizzled @"xxww" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyxw" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyyw" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xyzw" v+ , swizzled @"xywx" v+ , swizzled @"xywy" v+ , swizzled @"xywz" v+ , swizzled @"xyww" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzxw" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzyw" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"xzzw" v+ , swizzled @"xzwx" v+ , swizzled @"xzwy" v+ , swizzled @"xzwz" v+ , swizzled @"xzww" v+ , swizzled @"xwxx" v+ , swizzled @"xwxy" v+ , swizzled @"xwxz" v+ , swizzled @"xwxw" v+ , swizzled @"xwyx" v+ , swizzled @"xwyy" v+ , swizzled @"xwyz" v+ , swizzled @"xwyw" v+ , swizzled @"xwzx" v+ , swizzled @"xwzy" v+ , swizzled @"xwzz" v+ , swizzled @"xwzw" v+ , swizzled @"xwwx" v+ , swizzled @"xwwy" v+ , swizzled @"xwwz" v+ , swizzled @"xwww" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxxw" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxyw" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yxzw" v+ , swizzled @"yxwx" v+ , swizzled @"yxwy" v+ , swizzled @"yxwz" v+ , swizzled @"yxww" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyxw" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyyw" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yyzw" v+ , swizzled @"yywx" v+ , swizzled @"yywy" v+ , swizzled @"yywz" v+ , swizzled @"yyww" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzxw" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzyw" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"yzzw" v+ , swizzled @"yzwx" v+ , swizzled @"yzwy" v+ , swizzled @"yzwz" v+ , swizzled @"yzww" v+ , swizzled @"ywxx" v+ , swizzled @"ywxy" v+ , swizzled @"ywxz" v+ , swizzled @"ywxw" v+ , swizzled @"ywyx" v+ , swizzled @"ywyy" v+ , swizzled @"ywyz" v+ , swizzled @"ywyw" v+ , swizzled @"ywzx" v+ , swizzled @"ywzy" v+ , swizzled @"ywzz" v+ , swizzled @"ywzw" v+ , swizzled @"ywwx" v+ , swizzled @"ywwy" v+ , swizzled @"ywwz" v+ , swizzled @"ywww" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxxw" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxyw" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zxzw" v+ , swizzled @"zxwx" v+ , swizzled @"zxwy" v+ , swizzled @"zxwz" v+ , swizzled @"zxww" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyxw" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyyw" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zyzw" v+ , swizzled @"zywx" v+ , swizzled @"zywy" v+ , swizzled @"zywz" v+ , swizzled @"zyww" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzxw" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzyw" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"zzzw" v+ , swizzled @"zzwx" v+ , swizzled @"zzwy" v+ , swizzled @"zzwz" v+ , swizzled @"zzww" v+ , swizzled @"zwxx" v+ , swizzled @"zwxy" v+ , swizzled @"zwxz" v+ , swizzled @"zwxw" v+ , swizzled @"zwyx" v+ , swizzled @"zwyy" v+ , swizzled @"zwyz" v+ , swizzled @"zwyw" v+ , swizzled @"zwzx" v+ , swizzled @"zwzy" v+ , swizzled @"zwzz" v+ , swizzled @"zwzw" v+ , swizzled @"zwwx" v+ , swizzled @"zwwy" v+ , swizzled @"zwwz" v+ , swizzled @"zwww" v+ , swizzled @"wxxx" v+ , swizzled @"wxxy" v+ , swizzled @"wxxz" v+ , swizzled @"wxxw" v+ , swizzled @"wxyx" v+ , swizzled @"wxyy" v+ , swizzled @"wxyz" v+ , swizzled @"wxyw" v+ , swizzled @"wxzx" v+ , swizzled @"wxzy" v+ , swizzled @"wxzz" v+ , swizzled @"wxzw" v+ , swizzled @"wxwx" v+ , swizzled @"wxwy" v+ , swizzled @"wxwz" v+ , swizzled @"wxww" v+ , swizzled @"wyxx" v+ , swizzled @"wyxy" v+ , swizzled @"wyxz" v+ , swizzled @"wyxw" v+ , swizzled @"wyyx" v+ , swizzled @"wyyy" v+ , swizzled @"wyyz" v+ , swizzled @"wyyw" v+ , swizzled @"wyzx" v+ , swizzled @"wyzy" v+ , swizzled @"wyzz" v+ , swizzled @"wyzw" v+ , swizzled @"wywx" v+ , swizzled @"wywy" v+ , swizzled @"wywz" v+ , swizzled @"wyww" v+ , swizzled @"wzxx" v+ , swizzled @"wzxy" v+ , swizzled @"wzxz" v+ , swizzled @"wzxw" v+ , swizzled @"wzyx" v+ , swizzled @"wzyy" v+ , swizzled @"wzyz" v+ , swizzled @"wzyw" v+ , swizzled @"wzzx" v+ , swizzled @"wzzy" v+ , swizzled @"wzzz" v+ , swizzled @"wzzw" v+ , swizzled @"wzwx" v+ , swizzled @"wzwy" v+ , swizzled @"wzwz" v+ , swizzled @"wzww" v+ , swizzled @"wwxx" v+ , swizzled @"wwxy" v+ , swizzled @"wwxz" v+ , swizzled @"wwxw" v+ , swizzled @"wwyx" v+ , swizzled @"wwyy" v+ , swizzled @"wwyz" v+ , swizzled @"wwyw" v+ , swizzled @"wwzx" v+ , swizzled @"wwzy" v+ , swizzled @"wwzz" v+ , swizzled @"wwzw" v+ , swizzled @"wwwx" v+ , swizzled @"wwwy" v+ , swizzled @"wwwz" v+ , swizzled @"wwww" v+ ]++u64vec2Swizzles :: U64Vec2 -> [Maybe Mismatch]+u64vec2Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"xy0" v+ , swizzled @"xy1" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"xy00" v+ , swizzled @"xy01" v+ , swizzled @"xy10" v+ , swizzled @"xy11" v+ ]++u64vec3Swizzles :: U64Vec3 -> [Maybe Mismatch]+u64vec3Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"xyz0" v+ , swizzled @"xyz1" v+ ]++u64vec4Swizzles :: U64Vec4 -> [Maybe Mismatch]+u64vec4Swizzles v =+ [ swizzled @"x" v+ , swizzled @"y" v+ , swizzled @"z" v+ , swizzled @"w" v+ , swizzled @"xx" v+ , swizzled @"xy" v+ , swizzled @"xz" v+ , swizzled @"xw" v+ , swizzled @"yx" v+ , swizzled @"yy" v+ , swizzled @"yz" v+ , swizzled @"yw" v+ , swizzled @"zx" v+ , swizzled @"zy" v+ , swizzled @"zz" v+ , swizzled @"zw" v+ , swizzled @"wx" v+ , swizzled @"wy" v+ , swizzled @"wz" v+ , swizzled @"ww" v+ , swizzled @"xxx" v+ , swizzled @"xxy" v+ , swizzled @"xxz" v+ , swizzled @"xxw" v+ , swizzled @"xyx" v+ , swizzled @"xyy" v+ , swizzled @"xyz" v+ , swizzled @"xyw" v+ , swizzled @"xzx" v+ , swizzled @"xzy" v+ , swizzled @"xzz" v+ , swizzled @"xzw" v+ , swizzled @"xwx" v+ , swizzled @"xwy" v+ , swizzled @"xwz" v+ , swizzled @"xww" v+ , swizzled @"yxx" v+ , swizzled @"yxy" v+ , swizzled @"yxz" v+ , swizzled @"yxw" v+ , swizzled @"yyx" v+ , swizzled @"yyy" v+ , swizzled @"yyz" v+ , swizzled @"yyw" v+ , swizzled @"yzx" v+ , swizzled @"yzy" v+ , swizzled @"yzz" v+ , swizzled @"yzw" v+ , swizzled @"ywx" v+ , swizzled @"ywy" v+ , swizzled @"ywz" v+ , swizzled @"yww" v+ , swizzled @"zxx" v+ , swizzled @"zxy" v+ , swizzled @"zxz" v+ , swizzled @"zxw" v+ , swizzled @"zyx" v+ , swizzled @"zyy" v+ , swizzled @"zyz" v+ , swizzled @"zyw" v+ , swizzled @"zzx" v+ , swizzled @"zzy" v+ , swizzled @"zzz" v+ , swizzled @"zzw" v+ , swizzled @"zwx" v+ , swizzled @"zwy" v+ , swizzled @"zwz" v+ , swizzled @"zww" v+ , swizzled @"wxx" v+ , swizzled @"wxy" v+ , swizzled @"wxz" v+ , swizzled @"wxw" v+ , swizzled @"wyx" v+ , swizzled @"wyy" v+ , swizzled @"wyz" v+ , swizzled @"wyw" v+ , swizzled @"wzx" v+ , swizzled @"wzy" v+ , swizzled @"wzz" v+ , swizzled @"wzw" v+ , swizzled @"wwx" v+ , swizzled @"wwy" v+ , swizzled @"wwz" v+ , swizzled @"www" v+ , swizzled @"xxxx" v+ , swizzled @"xxxy" v+ , swizzled @"xxxz" v+ , swizzled @"xxxw" v+ , swizzled @"xxyx" v+ , swizzled @"xxyy" v+ , swizzled @"xxyz" v+ , swizzled @"xxyw" v+ , swizzled @"xxzx" v+ , swizzled @"xxzy" v+ , swizzled @"xxzz" v+ , swizzled @"xxzw" v+ , swizzled @"xxwx" v+ , swizzled @"xxwy" v+ , swizzled @"xxwz" v+ , swizzled @"xxww" v+ , swizzled @"xyxx" v+ , swizzled @"xyxy" v+ , swizzled @"xyxz" v+ , swizzled @"xyxw" v+ , swizzled @"xyyx" v+ , swizzled @"xyyy" v+ , swizzled @"xyyz" v+ , swizzled @"xyyw" v+ , swizzled @"xyzx" v+ , swizzled @"xyzy" v+ , swizzled @"xyzz" v+ , swizzled @"xyzw" v+ , swizzled @"xywx" v+ , swizzled @"xywy" v+ , swizzled @"xywz" v+ , swizzled @"xyww" v+ , swizzled @"xzxx" v+ , swizzled @"xzxy" v+ , swizzled @"xzxz" v+ , swizzled @"xzxw" v+ , swizzled @"xzyx" v+ , swizzled @"xzyy" v+ , swizzled @"xzyz" v+ , swizzled @"xzyw" v+ , swizzled @"xzzx" v+ , swizzled @"xzzy" v+ , swizzled @"xzzz" v+ , swizzled @"xzzw" v+ , swizzled @"xzwx" v+ , swizzled @"xzwy" v+ , swizzled @"xzwz" v+ , swizzled @"xzww" v+ , swizzled @"xwxx" v+ , swizzled @"xwxy" v+ , swizzled @"xwxz" v+ , swizzled @"xwxw" v+ , swizzled @"xwyx" v+ , swizzled @"xwyy" v+ , swizzled @"xwyz" v+ , swizzled @"xwyw" v+ , swizzled @"xwzx" v+ , swizzled @"xwzy" v+ , swizzled @"xwzz" v+ , swizzled @"xwzw" v+ , swizzled @"xwwx" v+ , swizzled @"xwwy" v+ , swizzled @"xwwz" v+ , swizzled @"xwww" v+ , swizzled @"yxxx" v+ , swizzled @"yxxy" v+ , swizzled @"yxxz" v+ , swizzled @"yxxw" v+ , swizzled @"yxyx" v+ , swizzled @"yxyy" v+ , swizzled @"yxyz" v+ , swizzled @"yxyw" v+ , swizzled @"yxzx" v+ , swizzled @"yxzy" v+ , swizzled @"yxzz" v+ , swizzled @"yxzw" v+ , swizzled @"yxwx" v+ , swizzled @"yxwy" v+ , swizzled @"yxwz" v+ , swizzled @"yxww" v+ , swizzled @"yyxx" v+ , swizzled @"yyxy" v+ , swizzled @"yyxz" v+ , swizzled @"yyxw" v+ , swizzled @"yyyx" v+ , swizzled @"yyyy" v+ , swizzled @"yyyz" v+ , swizzled @"yyyw" v+ , swizzled @"yyzx" v+ , swizzled @"yyzy" v+ , swizzled @"yyzz" v+ , swizzled @"yyzw" v+ , swizzled @"yywx" v+ , swizzled @"yywy" v+ , swizzled @"yywz" v+ , swizzled @"yyww" v+ , swizzled @"yzxx" v+ , swizzled @"yzxy" v+ , swizzled @"yzxz" v+ , swizzled @"yzxw" v+ , swizzled @"yzyx" v+ , swizzled @"yzyy" v+ , swizzled @"yzyz" v+ , swizzled @"yzyw" v+ , swizzled @"yzzx" v+ , swizzled @"yzzy" v+ , swizzled @"yzzz" v+ , swizzled @"yzzw" v+ , swizzled @"yzwx" v+ , swizzled @"yzwy" v+ , swizzled @"yzwz" v+ , swizzled @"yzww" v+ , swizzled @"ywxx" v+ , swizzled @"ywxy" v+ , swizzled @"ywxz" v+ , swizzled @"ywxw" v+ , swizzled @"ywyx" v+ , swizzled @"ywyy" v+ , swizzled @"ywyz" v+ , swizzled @"ywyw" v+ , swizzled @"ywzx" v+ , swizzled @"ywzy" v+ , swizzled @"ywzz" v+ , swizzled @"ywzw" v+ , swizzled @"ywwx" v+ , swizzled @"ywwy" v+ , swizzled @"ywwz" v+ , swizzled @"ywww" v+ , swizzled @"zxxx" v+ , swizzled @"zxxy" v+ , swizzled @"zxxz" v+ , swizzled @"zxxw" v+ , swizzled @"zxyx" v+ , swizzled @"zxyy" v+ , swizzled @"zxyz" v+ , swizzled @"zxyw" v+ , swizzled @"zxzx" v+ , swizzled @"zxzy" v+ , swizzled @"zxzz" v+ , swizzled @"zxzw" v+ , swizzled @"zxwx" v+ , swizzled @"zxwy" v+ , swizzled @"zxwz" v+ , swizzled @"zxww" v+ , swizzled @"zyxx" v+ , swizzled @"zyxy" v+ , swizzled @"zyxz" v+ , swizzled @"zyxw" v+ , swizzled @"zyyx" v+ , swizzled @"zyyy" v+ , swizzled @"zyyz" v+ , swizzled @"zyyw" v+ , swizzled @"zyzx" v+ , swizzled @"zyzy" v+ , swizzled @"zyzz" v+ , swizzled @"zyzw" v+ , swizzled @"zywx" v+ , swizzled @"zywy" v+ , swizzled @"zywz" v+ , swizzled @"zyww" v+ , swizzled @"zzxx" v+ , swizzled @"zzxy" v+ , swizzled @"zzxz" v+ , swizzled @"zzxw" v+ , swizzled @"zzyx" v+ , swizzled @"zzyy" v+ , swizzled @"zzyz" v+ , swizzled @"zzyw" v+ , swizzled @"zzzx" v+ , swizzled @"zzzy" v+ , swizzled @"zzzz" v+ , swizzled @"zzzw" v+ , swizzled @"zzwx" v+ , swizzled @"zzwy" v+ , swizzled @"zzwz" v+ , swizzled @"zzww" v+ , swizzled @"zwxx" v+ , swizzled @"zwxy" v+ , swizzled @"zwxz" v+ , swizzled @"zwxw" v+ , swizzled @"zwyx" v+ , swizzled @"zwyy" v+ , swizzled @"zwyz" v+ , swizzled @"zwyw" v+ , swizzled @"zwzx" v+ , swizzled @"zwzy" v+ , swizzled @"zwzz" v+ , swizzled @"zwzw" v+ , swizzled @"zwwx" v+ , swizzled @"zwwy" v+ , swizzled @"zwwz" v+ , swizzled @"zwww" v+ , swizzled @"wxxx" v+ , swizzled @"wxxy" v+ , swizzled @"wxxz" v+ , swizzled @"wxxw" v+ , swizzled @"wxyx" v+ , swizzled @"wxyy" v+ , swizzled @"wxyz" v+ , swizzled @"wxyw" v+ , swizzled @"wxzx" v+ , swizzled @"wxzy" v+ , swizzled @"wxzz" v+ , swizzled @"wxzw" v+ , swizzled @"wxwx" v+ , swizzled @"wxwy" v+ , swizzled @"wxwz" v+ , swizzled @"wxww" v+ , swizzled @"wyxx" v+ , swizzled @"wyxy" v+ , swizzled @"wyxz" v+ , swizzled @"wyxw" v+ , swizzled @"wyyx" v+ , swizzled @"wyyy" v+ , swizzled @"wyyz" v+ , swizzled @"wyyw" v+ , swizzled @"wyzx" v+ , swizzled @"wyzy" v+ , swizzled @"wyzz" v+ , swizzled @"wyzw" v+ , swizzled @"wywx" v+ , swizzled @"wywy" v+ , swizzled @"wywz" v+ , swizzled @"wyww" v+ , swizzled @"wzxx" v+ , swizzled @"wzxy" v+ , swizzled @"wzxz" v+ , swizzled @"wzxw" v+ , swizzled @"wzyx" v+ , swizzled @"wzyy" v+ , swizzled @"wzyz" v+ , swizzled @"wzyw" v+ , swizzled @"wzzx" v+ , swizzled @"wzzy" v+ , swizzled @"wzzz" v+ , swizzled @"wzzw" v+ , swizzled @"wzwx" v+ , swizzled @"wzwy" v+ , swizzled @"wzwz" v+ , swizzled @"wzww" v+ , swizzled @"wwxx" v+ , swizzled @"wwxy" v+ , swizzled @"wwxz" v+ , swizzled @"wwxw" v+ , swizzled @"wwyx" v+ , swizzled @"wwyy" v+ , swizzled @"wwyz" v+ , swizzled @"wwyw" v+ , swizzled @"wwzx" v+ , swizzled @"wwzy" v+ , swizzled @"wwzz" v+ , swizzled @"wwzw" v+ , swizzled @"wwwx" v+ , swizzled @"wwwy" v+ , swizzled @"wwwz" v+ , swizzled @"wwww" v+ ]
+ test/Spec/Transform.hs view
@@ -0,0 +1,105 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}++module Spec.Transform (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Linear (M44, V3(..))++import Geomancy.Mat4 qualified+import Geomancy.Quaternion qualified+import Geomancy.Transform ((!.))+import Geomancy.Transform qualified as Transform++import Support.Ball (Ball, balls, consistent, enclosed)+import Support.Fixtures+ (intrinsicComposed, intrinsicComposedRef, quarterTurn, rotationsMatch, trs, trsRef, xPos, yNeg, yPos, zPos)+import Support.Linear (toV3)+import Support.Reference.Mat4 qualified as Ref.Mat4+import Support.Reference.Quaternion qualified as Ref.Quaternion+import Support.Reference.Transform qualified as Ref.Transform++tests :: TestTree+tests = testGroup "Transform"+ [ testPropertyNamed "det" "prop_transform_det" prop_transform_det+ , testPropertyNamed "rotateX" "prop_transform_rotateX" prop_transform_rotateX+ , testPropertyNamed "rotateY" "prop_transform_rotateY" prop_transform_rotateY+ , testPropertyNamed "rotateZ" "prop_transform_rotateZ" prop_transform_rotateZ+ , testPropertyNamed "node" "prop_transform_node" prop_transform_node+ , testPropertyNamed "order" "prop_transform_order" prop_transform_order+ ]++prop_transform_det :: Property+prop_transform_det = withTests 1 $ property do+ 1 === Geomancy.Mat4.det Geomancy.Mat4.identity+ 1 === Geomancy.Mat4.det (Transform.rotateY (pi/6)) -- area-preserving+ 1 === Geomancy.Mat4.det (Transform.translate 1 2 3) -- area-preserving too+ 0 === Geomancy.Mat4.det (Transform.scaleX 0) -- space collapse, no inverse+ -1 === Geomancy.Mat4.det (Transform.scaleZ (-1)) -- flips the space+ 8 === Geomancy.Mat4.det (Transform.scale 2) -- stretches a little+ (1/8) === Geomancy.Mat4.det (Transform.scale (1/2)) -- stretches backwards++prop_transform_rotateX :: Property+prop_transform_rotateX = withTests 1 $ property do+ rotationMatches xPos Transform.rotateX Ref.Transform.rotateX zPos yNeg++prop_transform_rotateY :: Property+prop_transform_rotateY = withTests 1 $ property do+ rotationMatches yPos Transform.rotateY Ref.Transform.rotateY zPos xPos++prop_transform_rotateZ :: Property+prop_transform_rotateZ = withTests 1 $ property do+ rotationMatches zPos Transform.rotateZ Ref.Transform.rotateZ xPos yPos++rotationMatches+ :: Vec3+ -> (Float -> Transform)+ -> (Ball Float -> M44 (Ball Float))+ -> Vec3+ -> Vec3+ -> PropertyT IO ()+rotationMatches axis rotate rotateRef input expected = do+ rotationsMatch toV3+ (rotate quarterTurn !.)+ (rotateRef quarterTurn Ref.Transform.!.)+ [(input, expected)]+ rotationsMatch toV3+ (Transform.rotateQ (Geomancy.Quaternion.axisAngle axis quarterTurn) !.)+ (Ref.Transform.rotateQ (Ref.Quaternion.axisAngle (balls (toV3 axis)) quarterTurn) Ref.Transform.!.)+ [(input, expected)]++prop_transform_node :: Property+prop_transform_node = withTests 1 $ property do+ let+ r = intrinsicComposed 0 0 (pi/7)+ dps = Transform.node (vec3 2 3 5) r 11+ node = trs (vec3 2 3 5) r 11+ v = vec3 0 0 1+ rBall = intrinsicComposedRef 0 0 (pi/7)+ dpsBall = Ref.Transform.node (V3 2 3 5) rBall 11+ nodeBall = trsRef (V3 2 3 5) rBall 11+ viaDpsBall = dpsBall Ref.Transform.!. V3 0 0 1+ viaNodeBall = nodeBall Ref.Transform.!. V3 0 0 1+ replicate 3 Nothing === enclosed viaDpsBall (toV3 (dps !. v))+ replicate 3 Nothing === enclosed viaNodeBall (toV3 (node !. v))+ replicate 3 Nothing === consistent viaDpsBall viaNodeBall++prop_transform_order :: Property+prop_transform_order = withTests 1 $ property do+ let+ parent = Transform.node (vec3 4 5 6) (intrinsicComposed 0 0 (pi/6)) 2+ local = Transform.node (vec3 7 8 9) (intrinsicComposed 0 (pi/6) 0) (1/3)+ precomp = parent <> local !. vec3 0 0 1+ nocomp = parent !. local !. vec3 0 0 1+ parentBall = Ref.Transform.node (V3 4 5 6) (intrinsicComposedRef 0 0 (pi/6)) 2+ localBall = Ref.Transform.node (V3 7 8 9) (intrinsicComposedRef 0 (pi/6) 0) (1/3)+ precompBall = Ref.Mat4.compose parentBall localBall Ref.Transform.!. V3 0 0 1+ nocompBall = parentBall Ref.Transform.!. localBall Ref.Transform.!. V3 0 0 1+ replicate 3 Nothing === enclosed precompBall (toV3 precomp)+ replicate 3 Nothing === enclosed nocompBall (toV3 nocomp)+ replicate 3 Nothing === consistent precompBall nocompBall
+ test/Spec/Vec4.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}++module Spec.Vec4 (tests) where++import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Geomancy.DVec4 qualified+import Geomancy.Vec4 qualified++import Support.Gen (genEdgeScalar, genMostlySame)+import Support.Property (pattern PROP_TESTS)++tests :: TestTree+tests = testGroup "Vec4"+ [ testPropertyNamed "eq_ord" "prop_vec4_eq_ord" prop_vec4_eq_ord+ , testPropertyNamed "dvec4_eq_ord" "prop_dvec4_eq_ord" prop_dvec4_eq_ord+ ]++prop_vec4_eq_ord :: Property+prop_vec4_eq_ord = withTests PROP_TESTS $ property do+ (xsA, xsB) <- forAll nearbyTuples+ matchesTuple (Geomancy.Vec4.fromTuple xsA, xsA) (Geomancy.Vec4.fromTuple xsB, xsB)++prop_dvec4_eq_ord :: Property+prop_dvec4_eq_ord = withTests PROP_TESTS $ property do+ (xsA, xsB) <- forAll nearbyTuples+ matchesTuple (Geomancy.DVec4.fromTuple xsA, xsA) (Geomancy.DVec4.fromTuple xsB, xsB)++type Tuple4 a = (a, a, a, a)++nearbyTuples :: Fractional a => Gen (Tuple4 a, Tuple4 a)+nearbyTuples = do+ a <- (,,,) <$> genEdgeScalar <*> genEdgeScalar <*> genEdgeScalar <*> genEdgeScalar+ b <- traverse4 (genMostlySame 4) a+ pure (a, b)+ where+ traverse4 f (x, y, z, w) = (,,,) <$> f x <*> f y <*> f z <*> f w++matchesTuple+ :: (Ord v, Show v, Ord a)+ => (v, Tuple4 a)+ -> (v, Tuple4 a)+ -> PropertyT IO ()+matchesTuple (a, xsA) (b, xsB) = do+ label $ if xsA == xsB then "equal" else "different"+ (a == b) === (xsA == xsB)+ (a /= b) === (xsA /= xsB)+ compare a b === compare xsA xsB+ (a < b) === (xsA < xsB)+ (a <= b) === (xsA <= xsB)+ (a > b) === (xsA > xsB)+ (a >= b) === (xsA >= xsB)
+ test/Spec/Vec64.hs view
@@ -0,0 +1,94 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE TypeApplications #-}++module Spec.Vec64 (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Data.Proxy (Proxy(..))+import Data.Word (Word64)+import Foreign (allocaBytes, peekByteOff, pokeByteOff)+import Graphics.Gl.Block qualified as Block++import Geomancy.I64Vec3 qualified+import Geomancy.U64Vec3 qualified++import Support.Gen (genInt64, genWord64)+import Support.Property (pattern PROP_TESTS, layout140, storableRoundtrip)++tests :: TestTree+tests = testGroup "Vec64"+ [ testPropertyNamed "storable_roundtrip" "prop_vec64_storable_roundtrip" prop_vec64_storable_roundtrip+ , testPropertyNamed "packed_write_bounds" "prop_vec64_packed_write_bounds" prop_vec64_packed_write_bounds+ , testPropertyNamed "abs" "prop_vec64_abs" prop_vec64_abs+ , testPropertyNamed "block_layout" "prop_vec64_block_layout" prop_vec64_block_layout+ ]++prop_vec64_storable_roundtrip :: Property+prop_vec64_storable_roundtrip = withTests PROP_TESTS $ property do+ i2 <- forAll $ i64vec2 <$> genInt64 <*> genInt64+ storableRoundtrip i2 >>= (i2 ===)++ i3 <- forAll $ i64vec3 <$> genInt64 <*> genInt64 <*> genInt64+ storableRoundtrip i3 >>= (i3 ===)++ let i3p = Geomancy.I64Vec3.Packed i3+ storableRoundtrip i3p >>= (i3p ===)++ i4 <- forAll $ i64vec4 <$> genInt64 <*> genInt64 <*> genInt64 <*> genInt64+ storableRoundtrip i4 >>= (i4 ===)++ u2 <- forAll $ u64vec2 <$> genWord64 <*> genWord64+ storableRoundtrip u2 >>= (u2 ===)++ u3 <- forAll $ u64vec3 <$> genWord64 <*> genWord64 <*> genWord64+ storableRoundtrip u3 >>= (u3 ===)++ let u3p = Geomancy.U64Vec3.Packed u3+ storableRoundtrip u3p >>= (u3p ===)++ u4 <- forAll $ u64vec4 <$> genWord64 <*> genWord64 <*> genWord64 <*> genWord64+ storableRoundtrip u4 >>= (u4 ===)++prop_vec64_packed_write_bounds :: Property+prop_vec64_packed_write_bounds = withTests PROP_TESTS $ property do+ i3 <- forAll $ i64vec3 <$> genInt64 <*> genInt64 <*> genInt64+ u3 <- forAll $ u64vec3 <$> genWord64 <*> genWord64 <*> genWord64+ let sentinel = 0x5EAF00D :: Word64+ (i3', u3', afterI, afterU) <- evalIO $ allocaBytes 64 \ptr -> do+ pokeByteOff ptr 24 sentinel+ pokeByteOff ptr 56 sentinel+ pokeByteOff ptr 0 (Block.Packed i3)+ pokeByteOff ptr 32 (Block.Packed u3)+ (,,,)+ <$> fmap Block.getPacked (peekByteOff ptr 0)+ <*> fmap Block.getPacked (peekByteOff ptr 32)+ <*> peekByteOff ptr 24+ <*> peekByteOff ptr 56+ i3 === i3'+ u3 === u3'+ sentinel === afterI+ sentinel === afterU++prop_vec64_abs :: Property+prop_vec64_abs = withTests 1 $ property do+ i64vec2 1 2 === abs (i64vec2 (-1) 2)+ i64vec3 1 2 3 === abs (i64vec3 (-1) 2 (-3))+ i64vec4 1 2 3 4 === abs (i64vec4 (-1) 2 (-3) 4)++prop_vec64_block_layout :: Property+prop_vec64_block_layout = withTests 1 $ property do+ (16, 16) === layout140 (Proxy @I64Vec2)+ (32, 32) === layout140 (Proxy @I64Vec3)+ (32, 24) === layout140 (Proxy @Geomancy.I64Vec3.Packed)+ (32, 32) === layout140 (Proxy @I64Vec4)+ (16, 16) === layout140 (Proxy @U64Vec2)+ (32, 32) === layout140 (Proxy @U64Vec3)+ (32, 24) === layout140 (Proxy @Geomancy.U64Vec3.Packed)+ (32, 32) === layout140 (Proxy @U64Vec4)
+ test/Spec/Vulkan.hs view
@@ -0,0 +1,130 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE OverloadedStrings #-}++module Spec.Vulkan (tests) where++import Geomancy+import Hedgehog+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.Hedgehog (testPropertyNamed)++import Linear (M44, V3(..), V4(..))++import Geomancy.DMat4 qualified+import Geomancy.DTransform qualified as DTransform+import Geomancy.Mat4 qualified+import Geomancy.Mat4 ((!*))+import Geomancy.Transform qualified as Transform+import Geomancy.Vulkan.DProjection qualified as DProjection+import Geomancy.Vulkan.DView qualified as DView+import Geomancy.Vulkan.Projection qualified as Projection+import Geomancy.Vulkan.View qualified as View++import Support.Ball (Ball, enclosed, exactly)+import Support.Fixtures (quarterTurn, toNDC)+import Support.Gen (genDVec3, genVec3)+import Support.Linear (entries, toM44, toM44D)+import Support.Reference.Mat4 qualified as Ref.Mat4+import Support.Reference.Vulkan qualified as Ref.Vulkan++tests :: TestTree+tests = testGroup "Vulkan"+ [ testGroup "Projection"+ [ testPropertyNamed "reverseDepthRH" "prop_projection_reverseDepthRH" prop_projection_reverseDepthRH+ , testPropertyNamed "orthoRH_identity" "prop_projection_orthoRH_identity" prop_projection_orthoRH_identity+ , testPropertyNamed "reverseDepthOrthoRH" "prop_projection_reverseDepthOrthoRH" prop_projection_reverseDepthOrthoRH+ ]+ , testGroup "View"+ [ testPropertyNamed "lookAtRH_identity" "prop_view_lookAtRH_identity" prop_view_lookAtRH_identity+ ]+ , testGroup "DProjection"+ [ testPropertyNamed "dprojection" "prop_dprojection" prop_dprojection+ ]+ , testGroup "DView"+ [ testPropertyNamed "lookAtRH_identity" "prop_dview_lookAtRH_identity" prop_dview_lookAtRH_identity+ ]+ ]++prop_projection_reverseDepthRH :: Property+prop_projection_reverseDepthRH = withTests 1 $ property do+ let+ zNear = 0.1+ Transform p = Projection.reverseDepthRH quarterTurn zNear 800 600+ pBall = Ref.Vulkan.reverseDepthRH quarterTurn (exactly zNear) 800 600+ annotateShow p+ let+ -- stating the expected in transposed order for testing+ Transform expected = Geomancy.Mat4.rowMajor+ 0.7500 0.0000 0.0000 0.0000+ 0.0000 1.0000 0.0000 0.0000+ 0.0000 0.0000 0.0000 1.0000+ 0.0000 0.0000 zNear 0.0000+ annotateShow expected+ replicate 16 Nothing === enclosed (entries pBall) (entries (toM44 p))+ replicate 16 Nothing === enclosed (entries pBall) (entries (toM44 expected))++ let+ centerNearIn = vec4 0 0 zNear 1+ centerNearOut = p !* centerNearIn+ centerNearNDC = toNDC centerNearOut+ annotateShow (centerNearIn, centerNearOut)+ vec3 0 0 1 === centerNearNDC++prop_projection_orthoRH_identity :: Property+prop_projection_orthoRH_identity = withTests 1 $ property do+ let Transform pNative = Projection.orthoRH 0 1 2 2+ annotateShow pNative+ let pBall = Ref.Vulkan.orthoRH 0 1 2 2 :: M44 (Ball Float)+ replicate 16 Nothing === enclosed (entries pBall) (entries (toM44 pNative))+ replicate 16 Nothing === enclosed (entries pBall) (entries (toM44 mempty))++prop_projection_reverseDepthOrthoRH :: Property+prop_projection_reverseDepthOrthoRH = withTests 1 $ property do+ let t = Projection.reverseDepthOrthoRH 1 10 800 600+ annotateShow t++ vec4 0 0 1 1 === t !* vec4 0 0 1 1 -- center/near+ vec4 0 0 0 1 === t !* vec4 0 0 10 1 -- center/far+ vec4 1 1 0 1 === t !* vec4 400 300 10 1 -- edge/far+ vec4 (-1/400) (-1/300) 1 1 === t !* vec4 (-1) (-1) 1 1 -- step/near+ vec4 (1/400) (1/300) 0 1 === t !* vec4 1 1 10 1 -- step/far++prop_view_lookAtRH_identity :: Property+prop_view_lookAtRH_identity = property do+ let alreadyThere = View.lookAtRH_ (vec3 0 0 0) (vec3 0 0 1)+ annotateShow alreadyThere++ p <- forAll genVec3++ p === Transform.apply p alreadyThere++prop_dprojection :: Property+prop_dprojection = withTests 1 $ property do+ let+ zNear = 0.1+ DTransform p = DProjection.reverseDepthRH quarterTurn zNear 800 600+ centerNear = p Geomancy.DMat4.!* dvec4 0 0 zNear 1+ pBall = Ref.Vulkan.reverseDepthRH quarterTurn (exactly zNear) 800 600+ V4 xBall yBall zBall wBall = Ref.Mat4.apply pBall (V4 0 0 (exactly zNear) 1)+ centerNearNDCBall = V3 (xBall / wBall) (yBall / wBall) (zBall / wBall)+ withDVec4 centerNear \x y z w -> do+ replicate 3 Nothing === enclosed centerNearNDCBall (V3 (x/w) (y/w) (z/w))+ replicate 3 Nothing === enclosed centerNearNDCBall (V3 0 0 1 :: V3 Double)++ let+ DTransform o = DProjection.orthoRH 0 1 2 2+ oBall = Ref.Vulkan.orthoRH 0 1 2 2 :: M44 (Ball Double)+ replicate 16 Nothing === enclosed (entries oBall) (entries (toM44D o))+ replicate 16 Nothing === enclosed (entries oBall) (entries (toM44D mempty))++ let t = DProjection.reverseDepthOrthoRH 1 10 800 600+ dvec4 0 0 1 1 === t Geomancy.DMat4.!* dvec4 0 0 1 1+ dvec4 0 0 0 1 === t Geomancy.DMat4.!* dvec4 0 0 10 1+ dvec4 1 1 0 1 === t Geomancy.DMat4.!* dvec4 400 300 10 1++prop_dview_lookAtRH_identity :: Property+prop_dview_lookAtRH_identity = property do+ let alreadyThere = DView.lookAtRH_ (dvec3 0 0 0) (dvec3 0 0 1)+ p <- forAll genDVec3+ p === DTransform.apply p alreadyThere
+ test/Support/Ball.hs view
@@ -0,0 +1,265 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}++{- | Ball arithmetic++Also known as mid-rad interval arithmetic, is an extension of floating-point arithmetic+in which an error bound is attached to each variable.+-}++module Support.Ball+ ( Ball(..)+ , exactly+ , balls+ , balls44+ , widen+ , narrow+ , isExactly+ , sumAnyOrder+ , libmUlps+ , Outside(..)+ , outside+ , enclosed+ , Disjoint(..)+ , disjoint+ , consistent+ ) where++import Data.Foldable (toList)+import Linear (M44)+import Linear.Epsilon (Epsilon(..))++data Ball p = Ball+ { center :: {-# UNPACK #-} !Double+ , radius :: {-# UNPACK #-} !Double+ }+ deriving (Eq, Show)++exactly :: Real p => p -> Ball p+exactly x = Ball (realToFrac x) 0++balls :: (Functor f, Real p) => f p -> f (Ball p)+balls = fmap exactly++balls44 :: Real p => M44 p -> M44 (Ball p)+balls44 = fmap balls++widen :: Ball p -> Ball Double+widen (Ball m r) = Ball m r++narrow :: Ball Double -> Ball Float+narrow (Ball m r)+ | r == 0, representable @Float m = Ball m 0+ | otherwise = rounded m r++isExactly :: Double -> Ball p -> Bool+isExactly x (Ball m r) = r == 0 && m == x++-- | Assume `sin`, `cos` and `tan` are accurate to 1 ulp.+libmUlps :: Double+libmUlps = 1++unitRoundoff :: forall p. RealFloat p => Double+unitRoundoff = 2 ^^ negate (floatDigits (0 :: p))++smallestSubnormal :: forall p. RealFloat p => Double+smallestSubnormal = encodeFloat 1 (fst (floatRange (0 :: p)) - floatDigits (0 :: p))++representable :: forall p. RealFloat p => Double -> Bool+representable x = realToFrac (realToFrac x :: p) == x++gamma :: Int -> Double -> Double+gamma n u = nu / (1 - nu)+ where+ nu = fromIntegral n * u++radiusSlack :: Double -> Double+radiusSlack r = r * (1 + 16 * unitRoundoff @Double)++rounded :: forall p. RealFloat p => Double -> Double -> Ball p+rounded m propagated =+ Ball m $ radiusSlack (propagated + midpointRounding + simulatedRounding)+ where+ midpointRounding = unitRoundoff @Double * abs m + smallestSubnormal @Double+ simulatedRounding =+ unitRoundoff @p * (abs m + propagated + midpointRounding) + smallestSubnormal @p++libmRounded :: forall p. RealFloat p => Double -> Double -> Ball p+libmRounded m propagated =+ Ball m $ radiusSlack (propagated + midpointError + simulatedError)+ where+ midpointError = libmError @Double (abs m)+ simulatedError = libmError @p (abs m + propagated + midpointError)++libmError :: forall p. RealFloat p => Double -> Double+libmError magnitude = libmUlps * (2 * unitRoundoff @p * magnitude + smallestSubnormal @p)++twoSum :: Double -> Double -> (Double, Double)+twoSum a b = (s, (a - (s - b')) + (b - b'))+ where+ s = a + b+ b' = s - a++exactProduct :: Double -> Double -> Double -> Bool+exactProduct a b prod =+ snd (twoProduct a b) == 0 && toRational a * toRational b == toRational prod++twoProduct :: Double -> Double -> (Double, Double)+twoProduct a b = (p, ((ah * bh - p) + ah * bl + al * bh) + al * bl)+ where+ p = a * b+ (ah, al) = split a+ (bh, bl) = split b+ split x = (hi, x - hi)+ where+ c = 134217729 * x+ hi = c - (c - x)++plus :: forall p. RealFloat p => Ball p -> Ball p -> Ball p+plus a@(Ball ma ra) b@(Ball mb rb)+ | isExactly 0 a = b+ | isExactly 0 b = a+ | ra == 0, rb == 0, roundoff == 0, representable @p s = Ball s 0+ | otherwise = rounded s (ra + rb)+ where+ (s, roundoff) = twoSum ma mb++times :: forall p. RealFloat p => Ball p -> Ball p -> Ball p+times a@(Ball ma ra) b@(Ball mb rb)+ | isExactly 0 a || isExactly 0 b = Ball 0 0+ | isExactly 1 a = b+ | isExactly 1 b = a+ | isExactly (-1) a = negate b+ | isExactly (-1) b = negate a+ | ra == 0, rb == 0, exactProduct ma mb prod, representable @p prod = Ball prod 0+ | otherwise = rounded prod (abs ma * rb + abs mb * ra + ra * rb)+ where+ prod = ma * mb++sumAnyOrder :: forall p. RealFloat p => [Ball p] -> Ball p+sumAnyOrder summands =+ case filter (not . isExactly 0) summands of+ [] -> Ball 0 0+ [single] -> single+ nonZero -> anyOrder nonZero+ where+ anyOrder xs = Ball m $ radiusSlack (propagated + midpointRounding + simulatedRounding)+ where+ m = sum $ map center xs+ propagated = (1 + gamma additions (unitRoundoff @Double)) * sum (map radius xs)+ magnitudes = sum $ map (abs . center) xs+ additions = length xs - 1+ midpointRounding =+ gamma additions (unitRoundoff @Double) * magnitudes ++ fromIntegral additions * smallestSubnormal @Double+ simulatedRounding =+ gamma additions (unitRoundoff @p) * (magnitudes + propagated + midpointRounding) ++ fromIntegral additions * smallestSubnormal @p++literal :: forall p. RealFloat p => Rational -> Ball p+literal q+ | exact = Ball m 0+ | otherwise = roundedLiteral m (realToFrac (fromRational q :: p))+ where+ m = fromRational q+ exact = toRational m == q && toRational (fromRational q :: p) == q++roundedLiteral :: Double -> Double -> Ball p+roundedLiteral m simulated =+ Ball m $ radiusSlack (max (abs (simulated - m)) midpointRounding)+ where+ midpointRounding = unitRoundoff @Double * abs m + smallestSubnormal @Double++instance RealFloat p => Num (Ball p) where+ (+) = plus+ a - b = plus a (negate b)+ (*) = times+ negate (Ball m r) = Ball (negate m) r+ abs (Ball m r) = Ball (abs m) r+ signum = error "Ball.signum: no enclosure for a discontinuous function"+ fromInteger = literal . fromInteger++instance RealFloat p => Fractional (Ball p) where+ a@(Ball ma ra) / b@(Ball mb rb)+ | isExactly 1 b = a+ | abs mb <= 2 * rb = error "Ball./: divisor is too close to zero to bound the quotient"+ | ra == 0, rb == 0, exactQuotient = Ball quotient 0+ | otherwise = rounded quotient (((abs quotient + smallestSubnormal @Double) * rb + ra) / (abs mb - rb))+ where+ quotient = ma / mb+ exactQuotient =+ toRational quotient == toRational ma / toRational mb && representable @p quotient+ fromRational = literal++instance RealFloat p => Floating (Ball p) where+ pi = roundedLiteral pi (realToFrac (pi :: p))++ sqrt (Ball m r)+ | r == 0, exactProduct root root m, representable @p root = Ball root 0+ | m > 2 * r = rounded root (r / root)+ | m + r < 0 = error "Ball.sqrt: negative argument"+ | otherwise = rounded (upper / 2) (upper / 2)+ where+ root = sqrt m+ upper = sqrt (m + r)++ sin x@(Ball m r)+ | isExactly 0 x = Ball 0 0+ | otherwise = libmRounded (sin m) r+ cos x@(Ball m r)+ | isExactly 0 x = Ball 1 0+ | otherwise = libmRounded (cos m) r+ tan x+ | isExactly 0 x = Ball 0 0+ | otherwise = Ball m $ radiusSlack (r + libmError @p (abs m + r))+ where+ Ball m r = sin (widen x) / cos (widen x)++ exp = unsupported "exp"+ log = unsupported "log"+ asin = unsupported "asin"+ acos = unsupported "acos"+ atan = unsupported "atan"+ sinh = unsupported "sinh"+ cosh = unsupported "cosh"+ asinh = unsupported "asinh"+ acosh = unsupported "acosh"+ atanh = unsupported "atanh"++unsupported :: String -> a+unsupported name = error $ "Ball." <> name <> ": no enclosure implemented"++instance (RealFloat p, Epsilon p) => Epsilon (Ball p) where+ nearZero (Ball m r)+ | nearest == farthest = nearest+ | otherwise = error "Ball.nearZero: the ball straddles the threshold"+ where+ nearest = nearZero (realToFrac (max 0 (abs m - r)) :: p)+ farthest = nearZero (realToFrac (abs m + r) :: p)++data Outside p = Outside+ { actual :: p+ , enclosure :: Ball p+ }+ deriving (Eq, Show)++outside :: RealFloat p => Ball p -> p -> Maybe (Outside p)+outside ball@(Ball m r) x+ | isNaN x || isInfinite x = Just $ Outside x ball+ | abs (realToFrac x - m) <= r = Nothing+ | otherwise = Just $ Outside x ball++enclosed :: (Foldable f, Foldable g, RealFloat p) => f (Ball p) -> g p -> [Maybe (Outside p)]+enclosed bs xs = zipWith outside (toList bs) (toList xs)++data Disjoint p = Disjoint (Ball p) (Ball p)+ deriving (Eq, Show)++disjoint :: Ball p -> Ball p -> Maybe (Disjoint p)+disjoint a b+ | abs (center a - center b) <= radius a + radius b = Nothing+ | otherwise = Just $ Disjoint a b++consistent :: (Foldable f, Foldable g) => f (Ball p) -> g (Ball p) -> [Maybe (Disjoint p)]+consistent as bs = zipWith disjoint (toList as) (toList bs)
+ test/Support/Fixtures.hs view
@@ -0,0 +1,116 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}++module Support.Fixtures+ ( xPos+ , xNeg+ , yPos+ , yNeg+ , zPos+ , zNeg+ , intrinsicComposed+ , intrinsicComposedD+ , trs+ , toNDC+ , intrinsicComposedRef+ , trsRef+ , quarterTurn+ , twelfthTurn+ , fourteenthTurn+ , rotationsMatch+ ) where++import Geomancy+import Hedgehog++import Data.Foldable (for_)+import Linear (M44, V3(..))+import Linear qualified+import Linear.Epsilon (Epsilon)++import Geomancy.DQuaternion qualified+import Geomancy.Quaternion qualified+import Geomancy.Transform qualified as Transform++import Support.Ball (Ball, balls, enclosed)+import Support.Reference.Mat4 qualified as Ref.Mat4+import Support.Reference.Quaternion qualified as Ref.Quaternion+import Support.Reference.Transform qualified as Ref.Transform++xPos :: Vec3+xPos = vec3 1 0 0++xNeg :: Vec3+xNeg = vec3 (-1) 0 0++yPos :: Vec3+yPos = vec3 0 1 0++yNeg :: Vec3+yNeg = vec3 0 (-1) 0++zPos :: Vec3+zPos = vec3 0 0 1++zNeg :: Vec3+zNeg = vec3 0 0 (-1)++intrinsicComposed :: Float -> Float -> Float -> Quaternion+intrinsicComposed roll pitch yaw =+ Geomancy.Quaternion.axisAngle (vec3 0 1 0) yaw *+ Geomancy.Quaternion.axisAngle (vec3 1 0 0) pitch *+ Geomancy.Quaternion.axisAngle (vec3 0 0 1) roll++intrinsicComposedD :: Double -> Double -> Double -> DQuaternion+intrinsicComposedD roll pitch yaw =+ Geomancy.DQuaternion.axisAngle (dvec3 0 1 0) yaw *+ Geomancy.DQuaternion.axisAngle (dvec3 1 0 0) pitch *+ Geomancy.DQuaternion.axisAngle (dvec3 0 0 1) roll++trs :: Vec3 -> Quaternion -> Vec3 -> Transform+trs t r s = mconcat+ [ Transform.translateV t+ , Transform.rotateQ r+ , Transform.scaleV s+ ]++toNDC :: Vec4 -> Vec3+toNDC v = withVec4 v \x y z w -> vec3 (x/w) (y/w) (z/w)++intrinsicComposedRef :: (Floating a, Epsilon a) => a -> a -> a -> Linear.Quaternion a+intrinsicComposedRef roll pitch yaw =+ Ref.Quaternion.axisAngle (V3 0 1 0) yaw `Ref.Quaternion.multiply`+ Ref.Quaternion.axisAngle (V3 1 0 0) pitch `Ref.Quaternion.multiply`+ Ref.Quaternion.axisAngle (V3 0 0 1) roll++trsRef :: RealFloat p => V3 (Ball p) -> Linear.Quaternion (Ball p) -> V3 (Ball p) -> M44 (Ball p)+trsRef t r s = foldr Ref.Mat4.compose Ref.Mat4.identity+ [ Ref.Transform.translateV t+ , Ref.Transform.rotateQ r+ , Ref.Transform.scaleV s+ ]++quarterTurn :: Floating a => a+quarterTurn = pi / 2++twelfthTurn :: Floating a => a+twelfthTurn = pi / 6++fourteenthTurn :: Floating a => a+fourteenthTurn = pi / 7++rotationsMatch+ :: (Show v, Show p, RealFloat p)+ => (v -> V3 p)+ -> (v -> v)+ -> (V3 (Ball p) -> V3 (Ball p))+ -> [(v, v)]+ -> PropertyT IO ()+rotationsMatch toV rotate rotateBall cases =+ for_ cases \(input, expected) -> do+ let+ rotated = rotate input+ rotatedBall = rotateBall (balls (toV input))+ annotateShow rotated+ replicate 3 Nothing === enclosed rotatedBall (toV rotated)+ replicate 3 Nothing === enclosed rotatedBall (toV expected)
+ test/Support/Gen.hs view
@@ -0,0 +1,168 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}++module Support.Gen+ ( genFloat+ , genDouble+ , genAngle+ , genAngleD+ , genVec2+ , genVec3+ , genVec4+ , genSmallVec3+ , genDVec2+ , genDVec3+ , genDVec4+ , genSmallDVec3+ , genDQuaternion+ , genInt32+ , genWord32+ , genInt64+ , genWord64+ , genEdgeScalar+ , genMostlySame+ , genTransform+ , forAllTransform+ , forAllDTransform+ ) where++import Geomancy+import Hedgehog++import Control.Monad (when)+import Data.Int (Int32, Int64)+import Data.Word (Word32, Word64)+import GHC.Stack (withFrozenCallStack)+import Hedgehog.Gen qualified as Gen+import Hedgehog.Range qualified as Range+import Linear qualified+import Text.Printf (printf)++import Geomancy.DMat4 qualified+import Geomancy.Mat4 qualified+import Geomancy.Transform qualified as Transform++import Support.Linear (toM44, toM44D)++forAllTransform :: PropertyT IO (Geomancy.Mat4.Mat4, Linear.M44 Float)+forAllTransform = withFrozenCallStack do+ (_name, Transform g) <- forAllWith fst genTransform+ pure (g, toM44 g)++forAllDTransform :: PropertyT IO (Geomancy.DMat4.DMat4, Linear.M44 Double)+forAllDTransform = withFrozenCallStack do+ (_name, t) <- forAllWith fst genTransform+ let g = Geomancy.DMat4.fromMat4 t+ pure (g, toM44D g)++genInt32 :: Gen Int32+genInt32 = Gen.int32 Range.linearBounded++genWord32 :: Gen Word32+genWord32 = Gen.word32 Range.linearBounded++genInt64 :: Gen Int64+genInt64 = Gen.int64 Range.linearBounded++genWord64 :: Gen Word64+genWord64 = Gen.word64 Range.linearBounded++genEdgeScalar :: Fractional a => Gen a+genEdgeScalar = Gen.frequency [(4, pure 0), (4, pure (-0)), (4, pure 1), (4, pure (-1)), (1, pure (0 / 0))]++genMostlySame :: Fractional a => Int -> a -> Gen a+genMostlySame sameWeight x = Gen.frequency [(sameWeight, pure x), (1, genEdgeScalar)]++genFloat :: Gen Float+genFloat = Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)++genDouble :: Gen Double+genDouble = Gen.double (Range.linearFracFrom 0.0 (-1e6) 1e6)++genVec2 :: Gen Vec2+genVec2 = vec2 <$> genFloat <*> genFloat++genVec4 :: Gen Vec4+genVec4 = vec4 <$> genFloat <*> genFloat <*> genFloat <*> genFloat++genDVec2 :: Gen DVec2+genDVec2 = dvec2 <$> genDouble <*> genDouble++genDVec3 :: Gen DVec3+genDVec3 = dvec3 <$> genDouble <*> genDouble <*> genDouble++genDVec4 :: Gen DVec4+genDVec4 = dvec4 <$> genDouble <*> genDouble <*> genDouble <*> genDouble++genSmallVec3 :: Gen Vec3+genSmallVec3 =+ vec3+ <$> Gen.float (Range.linearFracFrom 0.0 (-10) 10)+ <*> Gen.float (Range.linearFracFrom 0.0 (-10) 10)+ <*> Gen.float (Range.linearFracFrom 0.0 (-10) 10)++genSmallDVec3 :: Gen DVec3+genSmallDVec3 =+ dvec3+ <$> Gen.double (Range.linearFracFrom 0.0 (-10) 10)+ <*> Gen.double (Range.linearFracFrom 0.0 (-10) 10)+ <*> Gen.double (Range.linearFracFrom 0.0 (-10) 10)++genDQuaternion :: Gen DQuaternion+genDQuaternion = dquaternion <$> genDouble <*> genDouble <*> genDouble <*> genDouble++genAngleD :: Gen Double+genAngleD = Gen.double (Range.linearFracFrom 0.0 (-8*pi) (8*pi))++genVec3 :: Gen Vec3+genVec3 =+ vec3+ <$> Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)+ <*> Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)+ <*> Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)++genAngle :: Gen Float+genAngle = Gen.float (Range.linearFracFrom 0.0 (-8*pi) (8*pi))++genTransform :: Gen ([Char], Transform) -- TODO: cross-check with Linear+genTransform = Gen.choice+ [ genIdentity+ , genTranslate+ , genRotate+ , genScale+ ]+ where+ genIdentity = pure ("identity", mempty)++ genTranslate = do+ x <- Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)+ y <- Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)+ z <- Gen.float (Range.linearFracFrom 0.0 (-1e6) 1e6)+ when (abs x == 0 && abs y == 0 && abs z == 0) Gen.discard+ pure+ ( printf "translate %0.4f %0.4f %0.4f" x y z+ , Transform.translate x y z+ )++ genRotate = do+ (name, axis) <- Gen.element+ [ ("rotate/x", Transform.rotateX)+ , ("rotate/y", Transform.rotateY)+ , ("rotate/z", Transform.rotateZ)+ ]+ angle <- genAngle+ when (abs angle == 0) Gen.discard+ pure+ ( printf "%s %0.4f" name angle+ , axis angle+ )++ genScale = do+ x <- Gen.float (Range.linearFracFrom 1.0 1e-6 1e6)+ y <- Gen.float (Range.linearFracFrom 1.0 1e-6 1e6)+ z <- Gen.float (Range.linearFracFrom 1.0 1e-6 1e6)+ when (abs x == 1 && abs y == 1 && abs z == 1) Gen.discard+ pure+ ( printf "scale %0.4f %0.4f %0.4f" x y z+ , Transform.scale3 x y z+ )
+ test/Support/Linear.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE ImportQualifiedPost #-}++module Support.Linear+ ( toM44+ , toM44D+ , toV3+ , toV3D+ , toV4+ , toV4D+ , toQ+ , toQD+ , entries+ ) where++import Geomancy++import Data.Foldable (toList)+import Linear qualified++import Geomancy.DMat4 qualified+import Geomancy.Mat4 (withRowMajor)++toM44 :: Geomancy.Mat4 -> Linear.M44 Float+toM44 mat4 =+ withRowMajor mat4+ \ m00 m10 m20 m30+ m01 m11 m21 m31+ m02 m12 m22 m32+ m03 m13 m23 m33 ->+ Linear.V4+ (Linear.V4 m00 m10 m20 m30)+ (Linear.V4 m01 m11 m21 m31)+ (Linear.V4 m02 m12 m22 m32)+ (Linear.V4 m03 m13 m23 m33)++toM44D :: Geomancy.DMat4.DMat4 -> Linear.M44 Double+toM44D dmat4 =+ Geomancy.DMat4.withRowMajor dmat4+ \ m00 m10 m20 m30+ m01 m11 m21 m31+ m02 m12 m22 m32+ m03 m13 m23 m33 ->+ Linear.V4+ (Linear.V4 m00 m10 m20 m30)+ (Linear.V4 m01 m11 m21 m31)+ (Linear.V4 m02 m12 m22 m32)+ (Linear.V4 m03 m13 m23 m33)++toV3 :: Vec3 -> Linear.V3 Float+toV3 v = withVec3 v Linear.V3++toV3D :: DVec3 -> Linear.V3 Double+toV3D v = withDVec3 v Linear.V3++toV4 :: Vec4 -> Linear.V4 Float+toV4 v = withVec4 v Linear.V4++toV4D :: DVec4 -> Linear.V4 Double+toV4D v = withDVec4 v Linear.V4++toQ :: Geomancy.Quaternion -> Linear.Quaternion Float+toQ q = withQuaternion q \s x y z -> Linear.Quaternion s (Linear.V3 x y z)++toQD :: DQuaternion -> Linear.Quaternion Double+toQD q = withDQuaternion q \s x y z -> Linear.Quaternion s (Linear.V3 x y z)++entries :: (Foldable f, Foldable g) => f (g a) -> [a]+entries = concatMap toList
+ test/Support/Property.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE NumericUnderscores #-}+{-# LANGUAGE PatternSynonyms #-}++module Support.Property+ ( pattern PROP_TESTS+ , pattern PROP_TESTS_BRUTAL+ , storableRoundtrip+ , layout140+ ) where++import Hedgehog++import Data.Proxy (Proxy)+import Foreign (Storable, peek, with)+import Graphics.Gl.Block qualified as Block++-- | Enough tests to cover the principles+pattern PROP_TESTS :: TestLimit+pattern PROP_TESTS = 10_000++-- | Try harder to catch FP precision errors+pattern PROP_TESTS_BRUTAL :: TestLimit+pattern PROP_TESTS_BRUTAL = 10_000_000++storableRoundtrip :: Storable a => a -> PropertyT IO a+storableRoundtrip x = evalIO $ with x peek++layout140 :: Block.Block a => Proxy a -> (Int, Int)+layout140 p = (Block.alignment140 p, Block.sizeOf140 p)
+ test/Support/Reference/Linear.hs view
@@ -0,0 +1,20 @@+module Support.Reference.Linear+ ( multiply+ , conjugate+ , rotate+ ) where++import Linear (Quaternion(..), V3, cross, dot, (*^))++multiply :: Num a => Quaternion a -> Quaternion a -> Quaternion a+multiply (Quaternion s1 v1) (Quaternion s2 v2) =+ Quaternion (s1 * s2 - (v1 `dot` v2)) $+ (v1 `cross` v2) + s1 *^ v2 + s2 *^ v1++conjugate :: Num a => Quaternion a -> Quaternion a+conjugate (Quaternion e v) = Quaternion e (negate v)++rotate :: Num a => Quaternion a -> V3 a -> V3 a+rotate q v = ijk+ where+ Quaternion _ ijk = q `multiply` Quaternion 0 v `multiply` conjugate q
+ test/Support/Reference/Mat4.hs view
@@ -0,0 +1,140 @@+{-# LANGUAGE RecordWildCards #-}++module Support.Reference.Mat4+ ( rowMajor+ , colMajor+ , identity+ , compose+ , apply+ , det+ , inverse+ ) where++import Data.Foldable (toList)+import Linear (M44, V4(..), transpose)++import Support.Ball (Ball, sumAnyOrder)++rowMajor+ :: a -> a -> a -> a+ -> a -> a -> a -> a+ -> a -> a -> a -> a+ -> a -> a -> a -> a+ -> M44 a+rowMajor+ m00 m01 m02 m03+ m10 m11 m12 m13+ m20 m21 m22 m23+ m30 m31 m32 m33 =+ V4+ (V4 m00 m01 m02 m03)+ (V4 m10 m11 m12 m13)+ (V4 m20 m21 m22 m23)+ (V4 m30 m31 m32 m33)++colMajor+ :: a -> a -> a -> a+ -> a -> a -> a -> a+ -> a -> a -> a -> a+ -> a -> a -> a -> a+ -> M44 a+colMajor+ m00 m01 m02 m03+ m10 m11 m12 m13+ m20 m21 m22 m23+ m30 m31 m32 m33 =+ transpose $ rowMajor+ m00 m01 m02 m03+ m10 m11 m12 m13+ m20 m21 m22 m23+ m30 m31 m32 m33++identity :: Num a => M44 a+identity = rowMajor+ 1 0 0 0+ 0 1 0 0+ 0 0 1 0+ 0 0 0 1++compose :: RealFloat p => M44 (Ball p) -> M44 (Ball p) -> M44 (Ball p)+compose a b = fmap (\row -> fmap (dotAnyOrder row) (transpose a)) b++apply :: RealFloat p => M44 (Ball p) -> V4 (Ball p) -> V4 (Ball p)+apply m v = fmap (dotAnyOrder v) (transpose m)++dotAnyOrder :: RealFloat p => V4 (Ball p) -> V4 (Ball p) -> Ball p+dotAnyOrder a b = sumAnyOrder $ zipWith (*) (toList a) (toList b)++det :: Num a => M44 a -> a+det m =+ s0 * c5+ - s1 * c4+ + s2 * c3+ + s3 * c2+ - s4 * c1+ + s5 * c0+ where+ Cofactors{..} = cofactors m++inverse :: Fractional a => M44 a -> M44 a+inverse m@(V4+ (V4 m00 m01 m02 m03)+ (V4 m10 m11 m12 m13)+ (V4 m20 m21 m22 m23)+ (V4 m30 m31 m32 m33)) =+ rowMajor+ i00 i01 i02 i03+ i10 i11 i12 i13+ i20 i21 i22 i23+ i30 i31 i32 i33+ where+ Cofactors{..} = cofactors m++ invDet = recip (det m)++ i00 = ( m11 * c5 - m12 * c4 + m13 * c3) * invDet+ i01 = (-m01 * c5 + m02 * c4 - m03 * c3) * invDet+ i02 = ( m31 * s5 - m32 * s4 + m33 * s3) * invDet+ i03 = (-m21 * s5 + m22 * s4 - m23 * s3) * invDet++ i10 = (-m10 * c5 + m12 * c2 - m13 * c1) * invDet+ i11 = ( m00 * c5 - m02 * c2 + m03 * c1) * invDet+ i12 = (-m30 * s5 + m32 * s2 - m33 * s1) * invDet+ i13 = ( m20 * s5 - m22 * s2 + m23 * s1) * invDet++ i20 = ( m10 * c4 - m11 * c2 + m13 * c0) * invDet+ i21 = (-m00 * c4 + m01 * c2 - m03 * c0) * invDet+ i22 = ( m30 * s4 - m31 * s2 + m33 * s0) * invDet+ i23 = (-m20 * s4 + m21 * s2 - m23 * s0) * invDet++ i30 = (-m10 * c3 + m11 * c1 - m12 * c0) * invDet+ i31 = ( m00 * c3 - m01 * c1 + m02 * c0) * invDet+ i32 = (-m30 * s3 + m31 * s1 - m32 * s0) * invDet+ i33 = ( m20 * s3 - m21 * s1 + m22 * s0) * invDet++data Cofactors a = Cofactors+ { s0, s1, s2, s3, s4, s5 :: a+ , c0, c1, c2, c3, c4, c5 :: a+ }++cofactors :: Num a => M44 a -> Cofactors a+cofactors (V4+ (V4 m00 m01 m02 m03)+ (V4 m10 m11 m12 m13)+ (V4 m20 m21 m22 m23)+ (V4 m30 m31 m32 m33)) =+ Cofactors+ { s0 = m00 * m11 - m10 * m01+ , s1 = m00 * m12 - m10 * m02+ , s2 = m00 * m13 - m10 * m03+ , s3 = m01 * m12 - m11 * m02+ , s4 = m01 * m13 - m11 * m03+ , s5 = m02 * m13 - m12 * m03++ , c5 = m22 * m33 - m32 * m23+ , c4 = m21 * m33 - m31 * m23+ , c3 = m21 * m32 - m31 * m22+ , c2 = m20 * m33 - m30 * m23+ , c1 = m20 * m32 - m30 * m22+ , c0 = m20 * m31 - m30 * m21+ }
+ test/Support/Reference/Quaternion.hs view
@@ -0,0 +1,62 @@+{-# LANGUAGE ImportQualifiedPost #-}++module Support.Reference.Quaternion+ ( multiply+ , axisAngle+ , intrinsic+ , extrinsic+ , rotate+ ) where++import Linear (Quaternion(..), V3(..))+import Linear.Epsilon (Epsilon)++import Support.Reference.Vec3 qualified as Vec3++multiply :: Num a => Quaternion a -> Quaternion a -> Quaternion a+multiply (Quaternion as v1) (Quaternion bs v2) = Quaternion s v+ where+ s = as * bs - Vec3.dot v1 v2+ v = Vec3.cross v1 v2 + fmap (* as) v2 + fmap (* bs) v1++axisAngle :: (Floating a, Epsilon a) => V3 a -> a -> Quaternion a+axisAngle axis rads =+ Quaternion (cos half) (fmap (* sin half) (Vec3.normalize axis))+ where+ half = rads / 2++intrinsic :: Floating a => a -> a -> a -> Quaternion a+intrinsic roll pitch yaw =+ Quaternion+ (cx * cy * cz + sx * sy * sz)+ (V3+ (sx * cy * cz + cx * sy * sz)+ (cx * sy * cz - sx * cy * sz)+ (cx * cy * sz - sx * sy * cz))+ where+ cx = cos (pitch * 0.5)+ sx = sin (pitch * 0.5)+ cy = cos (yaw * 0.5)+ sy = sin (yaw * 0.5)+ cz = cos (roll * 0.5)+ sz = sin (roll * 0.5)++extrinsic :: (Floating a, Epsilon a) => a -> a -> a -> Quaternion a+extrinsic heading elevation tilt =+ axisAngle (V3 0 0 1) tilt `multiply`+ axisAngle (V3 1 0 0) elevation `multiply`+ axisAngle (V3 0 1 0) heading++rotate :: Num a => Quaternion a -> V3 a -> V3 a+rotate (Quaternion w (V3 x y z)) (V3 vx vy vz) =+ V3+ (vx + w * tx + y * tz - z * ty)+ (vy + w * ty + z * tx - x * tz)+ (vz + w * tz + x * ty - y * tx)+ where+ x2 = x + x+ y2 = y + y+ z2 = z + z+ tx = y2 * vz - z2 * vy+ ty = z2 * vx - x2 * vz+ tz = x2 * vy - y2 * vx
+ test/Support/Reference/Transform.hs view
@@ -0,0 +1,107 @@+{-# LANGUAGE ImportQualifiedPost #-}++module Support.Reference.Transform+ ( (!.)+ , translate+ , translateV+ , scale3+ , scaleV+ , rotateX+ , rotateY+ , rotateZ+ , rotateQ+ , dirPos+ , node+ ) where++import Linear (M44, Quaternion(..), V3(..), V4(..))++import Support.Ball (Ball, isExactly)+import Support.Reference.Mat4 (colMajor)+import Support.Reference.Mat4 qualified as Mat4++(!.) :: RealFloat p => M44 (Ball p) -> V3 (Ball p) -> V3 (Ball p)+(!.) mat (V3 vx vy vz) = V3 (x / w) (y / w) (z / w)+ where+ V4 x y z w = Mat4.apply mat (V4 vx vy vz 1)++infixr 5 !.++translate :: Num a => a -> a -> a -> M44 a+translate x y z = colMajor+ 1 0 0 x+ 0 1 0 y+ 0 0 1 z+ 0 0 0 1++translateV :: Num a => V3 a -> M44 a+translateV (V3 x y z) = translate x y z++scale3 :: Num a => a -> a -> a -> M44 a+scale3 x y z = colMajor+ x 0 0 0+ 0 y 0 0+ 0 0 z 0+ 0 0 0 1++scaleV :: Num a => V3 a -> M44 a+scaleV (V3 x y z) = scale3 x y z++rotateX :: Floating a => a -> M44 a+rotateX rads =+ colMajor+ 1 0 0 0+ 0 c (-s) 0+ 0 s c 0+ 0 0 0 1+ where+ c = cos rads+ s = sin rads++rotateY :: Floating a => a -> M44 a+rotateY rads =+ colMajor+ c 0 s 0+ 0 1 0 0+ (-s) 0 c 0+ 0 0 0 1+ where+ c = cos rads+ s = sin rads++rotateZ :: Floating a => a -> M44 a+rotateZ rads =+ colMajor+ c (-s) 0 0+ s c 0 0+ 0 0 1 0+ 0 0 0 1+ where+ c = cos rads+ s = sin rads++rotateQ :: Num a => Quaternion a -> M44 a+rotateQ dir = dirPos dir 0++dirPos :: Num a => Quaternion a -> V3 a -> M44 a+dirPos (Quaternion w (V3 x y z)) (V3 tx ty tz) =+ colMajor+ (1 - 2 * (y2 + z2)) ( 2 * (xy - zw)) ( 2 * (xz + yw)) tx+ ( 2 * (xy + zw)) (1 - 2 * (x2 + z2)) ( 2 * (yz - xw)) ty+ ( 2 * (xz - yw)) ( 2 * (yz + xw)) (1 - 2 * (x2 + y2)) tz+ 0 0 0 1+ where+ x2 = x * x+ y2 = y * y+ z2 = z * z+ xy = x * y+ xz = x * z+ xw = x * w+ yz = y * z+ yw = y * w+ zw = z * w++node :: RealFloat p => V3 (Ball p) -> Quaternion (Ball p) -> V3 (Ball p) -> M44 (Ball p)+node t r s+ | all (isExactly 1) s = dirPos r t+ | otherwise = dirPos r t `Mat4.compose` scaleV s
+ test/Support/Reference/Vec3.hs view
@@ -0,0 +1,31 @@+module Support.Reference.Vec3+ ( dot+ , cross+ , normalize+ ) where++import Linear (V3(..))+import Linear.Epsilon (Epsilon(..))++dot :: Num a => V3 a -> V3 a -> a+dot (V3 a b c) (V3 d e f) =+ a * d ++ b * e ++ c * f++cross :: Num a => V3 a -> V3 a -> V3 a+cross (V3 a b c) (V3 d e f) =+ V3+ (b * f - c * e)+ (c * d - a * f)+ (a * e - b * d)++normalize :: (Floating a, Epsilon a) => V3 a -> V3 a+normalize v =+ if nearZero q || nearZero (1 - q) then+ v+ else+ fmap (/ l) v+ where+ q = dot v v+ l = sqrt q
+ test/Support/Reference/Vulkan.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE ImportQualifiedPost #-}++module Support.Reference.Vulkan+ ( reverseDepthRH+ , orthoRH+ , lookAtRH+ , lookAtRH_+ ) where++import Linear (M44, V3(..))+import Linear.Epsilon (Epsilon)++import Support.Reference.Mat4 (colMajor)+import Support.Reference.Vec3 (cross, dot, normalize)++reverseDepthRH :: Floating a => a -> a -> a -> a -> M44 a+reverseDepthRH fovRads zn width height =+ colMajor+ sx 0 0 0+ 0 sy 0 0+ 0 0 0 zn+ 0 0 1 0+ where+ sx = sy * recipAspect+ where+ recipAspect = height / width+ sy = 1 / tan (fovRads / 2)++orthoRH :: Fractional a => a -> a -> a -> a -> M44 a+orthoRH near far width height =+ colMajor+ sx 0 0 0+ 0 sy 0 0+ 0 0 z w+ 0 0 0 1+ where+ sx = 2 / width+ sy = 2 / height+ z = 1 / (far - near)+ w = near / (near - far)++lookAtRH :: (Floating a, Epsilon a) => V3 a -> V3 a -> V3 a -> M44 a+lookAtRH eye target up =+ colMajor+ rx ry rz (-er)+ ux uy uz (-eu)+ fx fy fz (-ef)+ 0 0 0 1+ where+ fwd@(V3 fx fy fz) = normalize (target - eye)+ rgt@(V3 rx ry rz) = normalize (cross fwd up)+ up'@(V3 ux uy uz) = normalize (cross fwd rgt)+ er = dot eye rgt+ eu = dot eye up'+ ef = dot eye fwd++lookAtRH_ :: (Floating a, Epsilon a) => V3 a -> V3 a -> M44 a+lookAtRH_ eye target = lookAtRH eye target (V3 0 (-1) 0)
+ test/Support/Swizzle.hs view
@@ -0,0 +1,127 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}++module Support.Swizzle+ ( Lanes(..)+ , Mismatch+ , swizzled+ , swizzles+ ) where++import Data.Int (Int32, Int64)+import Data.Maybe (catMaybes, fromMaybe)+import Data.Proxy (Proxy(..))+import Data.Word (Word32, Word64)+import GHC.Float (castDoubleToWord64, castFloatToWord32)+import GHC.Records (HasField(..))+import GHC.TypeLits (KnownSymbol, symbolVal)+import Hedgehog++import Geomancy++import Support.Property (pattern PROP_TESTS)++class Lanes v where+ lanes :: v -> [Word64]++instance Lanes Float where+ lanes x = [fromIntegral (castFloatToWord32 x)]++instance Lanes Double where+ lanes x = [castDoubleToWord64 x]++instance Lanes Int32 where+ lanes x = [fromIntegral x]++instance Lanes Word32 where+ lanes x = [fromIntegral x]++instance Lanes Int64 where+ lanes x = [fromIntegral x]++instance Lanes Word64 where+ lanes x = [x]++instance Lanes Vec2 where+ lanes v = withVec2 v \x y -> concatMap lanes [x, y]++instance Lanes Vec3 where+ lanes v = withVec3 v \x y z -> concatMap lanes [x, y, z]++instance Lanes Vec4 where+ lanes v = withVec4 v \x y z w -> concatMap lanes [x, y, z, w]++instance Lanes DVec2 where+ lanes v = withDVec2 v \x y -> concatMap lanes [x, y]++instance Lanes DVec3 where+ lanes v = withDVec3 v \x y z -> concatMap lanes [x, y, z]++instance Lanes DVec4 where+ lanes v = withDVec4 v \x y z w -> concatMap lanes [x, y, z, w]++instance Lanes IVec2 where+ lanes v = withIVec2 v \x y -> concatMap lanes [x, y]++instance Lanes IVec3 where+ lanes v = withIVec3 v \x y z -> concatMap lanes [x, y, z]++instance Lanes IVec4 where+ lanes v = withIVec4 v \x y z w -> concatMap lanes [x, y, z, w]++instance Lanes UVec2 where+ lanes v = withUVec2 v \x y -> concatMap lanes [x, y]++instance Lanes UVec3 where+ lanes v = withUVec3 v \x y z -> concatMap lanes [x, y, z]++instance Lanes UVec4 where+ lanes v = withUVec4 v \x y z w -> concatMap lanes [x, y, z, w]++instance Lanes I64Vec2 where+ lanes v = withI64Vec2 v \x y -> concatMap lanes [x, y]++instance Lanes I64Vec3 where+ lanes v = withI64Vec3 v \x y z -> concatMap lanes [x, y, z]++instance Lanes I64Vec4 where+ lanes v = withI64Vec4 v \x y z w -> concatMap lanes [x, y, z, w]++instance Lanes U64Vec2 where+ lanes v = withU64Vec2 v \x y -> concatMap lanes [x, y]++instance Lanes U64Vec3 where+ lanes v = withU64Vec3 v \x y z -> concatMap lanes [x, y, z]++instance Lanes U64Vec4 where+ lanes v = withU64Vec4 v \x y z w -> concatMap lanes [x, y, z, w]++data Mismatch = Mismatch String [Word64] [Word64]+ deriving (Eq, Show)++swizzles :: Show v => Gen v -> (v -> [Maybe Mismatch]) -> Property+swizzles gen checks = withTests PROP_TESTS $ property do+ v <- forAll gen+ catMaybes (checks v) === []++swizzled+ :: forall s v r+ . (KnownSymbol s, HasField s v r, Lanes v, Lanes r, Num r)+ => v+ -> Maybe Mismatch+swizzled v =+ if expected == actual then+ Nothing+ else+ Just (Mismatch name expected actual)+ where+ name = symbolVal (Proxy @s)+ expected = concatMap lane name+ actual = lanes (getField @s v)+ lane c = fromMaybe (error $ "no lane " <> [c]) $ lookup c (zip "xyzw" (map pure (lanes v)) <> constants)+ constants = [('0', splat 0), ('1', splat 1)]+ splat x = take 1 (lanes (x :: r))