packages feed

geomancy-0.4.0.0: test/Spec/Swizzle.hs

{-# 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
  ]