{-# 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 { forall to fro. Swizzle to fro -> fro -> to
swizzle :: fro -> to }

{-# INLINE (.@) #-}
(.@) :: forall to fro . fro -> Swizzle to fro -> to
fro
v .@ :: forall to fro. fro -> Swizzle to fro -> to
.@ Swizzle fro -> to
f = fro -> to
f fro
v

-- * From Vec2

-- ** To Float

instance IsLabel "x" (Swizzle Float Vec2) where
  fromLabel :: Swizzle Float Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
_ -> Float
x

instance IsLabel "y" (Swizzle Float Vec2) where
  fromLabel :: Swizzle Float Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
_ Float
y -> Float
y

-- ** To Vec2

instance IsLabel "xx" (Swizzle Vec2 Vec2) where
  fromLabel :: Swizzle Vec2 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
_ -> Float -> Float -> Vec2
vec2 Float
x Float
x

instance IsLabel "yx" (Swizzle Vec2 Vec2) where
  fromLabel :: Swizzle Vec2 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Vec2
vec2 Float
y Float
x

instance IsLabel "yy" (Swizzle Vec2 Vec2) where
  fromLabel :: Swizzle Vec2 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
_ Float
y -> Float -> Float -> Vec2
vec2 Float
y Float
y

-- ** To Vec3

instance IsLabel "xxx" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
x

instance IsLabel "xxy" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
y

instance IsLabel "xyx" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
x

instance IsLabel "xyy" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
y

instance IsLabel "yxx" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
x

instance IsLabel "yxy" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
y

instance IsLabel "yyx" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
x

instance IsLabel "yyy" (Swizzle Vec3 Vec2) where
  fromLabel :: Swizzle Vec3 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
_ Float
y -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
y

-- ** To Vec4

instance IsLabel "xxxx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
x

instance IsLabel "xxxy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
y

instance IsLabel "xxyx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
x

instance IsLabel "xxyy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
y

instance IsLabel "xyxx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
x

instance IsLabel "xyxy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
y

instance IsLabel "xyyx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
x

instance IsLabel "xyyy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
y

instance IsLabel "yxxx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
x

instance IsLabel "yxxy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
y

instance IsLabel "yxyx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
x

instance IsLabel "yxyy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
y

instance IsLabel "yyxx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
x

instance IsLabel "yyxy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
y

instance IsLabel "yyyx" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
x Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
x

instance IsLabel "yyyy" (Swizzle Vec4 Vec2) where
  fromLabel :: Swizzle Vec4 Vec2
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec2
v -> forall r. Vec2 -> (Float -> Float -> r) -> r
withVec2 Vec2
v \Float
_ Float
y -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
y

-- * From Vec3

-- * To Float

instance IsLabel "x" (Swizzle Float Vec3) where
  fromLabel :: Swizzle Float Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
_ -> Float
x

instance IsLabel "y" (Swizzle Float Vec3) where
  fromLabel :: Swizzle Float Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
_ -> Float
y

instance IsLabel "z" (Swizzle Float Vec3) where
  fromLabel :: Swizzle Float Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
_ Float
z -> Float
z

-- * To Vec2

instance IsLabel "xx" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
_ -> Float -> Float -> Vec2
vec2 Float
x Float
x

instance IsLabel "xy" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Vec2
vec2 Float
x Float
y

instance IsLabel "xz" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Vec2
vec2 Float
x Float
z

instance IsLabel "yx" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Vec2
vec2 Float
y Float
x

instance IsLabel "yy" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
_ -> Float -> Float -> Vec2
vec2 Float
y Float
y

instance IsLabel "yz" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Vec2
vec2 Float
y Float
z

instance IsLabel "zx" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Vec2
vec2 Float
z Float
x

instance IsLabel "zy" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Vec2
vec2 Float
z Float
y

instance IsLabel "zz" (Swizzle Vec2 Vec3) where
  fromLabel :: Swizzle Vec2 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
_ Float
z -> Float -> Float -> Vec2
vec2 Float
z Float
z

-- * To Vec3

instance IsLabel "xxx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
x

instance IsLabel "xxy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
y

instance IsLabel "xxz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
z

instance IsLabel "xyx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
x

instance IsLabel "xyy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
y

instance IsLabel "xzx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
x

instance IsLabel "xzy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
y

instance IsLabel "xzz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
z

instance IsLabel "yxx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
x

instance IsLabel "yxy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
y

instance IsLabel "yxz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
z

instance IsLabel "yyx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
x

instance IsLabel "yyy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
y

instance IsLabel "yyz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
z

instance IsLabel "yzx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
x

instance IsLabel "yzy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
y

instance IsLabel "yzz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
z

instance IsLabel "zxx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
x

instance IsLabel "zxy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
y

instance IsLabel "zxz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
z

instance IsLabel "zyx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
x

instance IsLabel "zyy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
y

instance IsLabel "zyz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
z

instance IsLabel "zzx" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
x

instance IsLabel "zzy" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
y

instance IsLabel "zzz" (Swizzle Vec3 Vec3) where
  fromLabel :: Swizzle Vec3 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
_ Float
z -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
z

-- * To Vec4

instance IsLabel "xxxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
x

instance IsLabel "xxxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
y

instance IsLabel "xxxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
z

instance IsLabel "xxyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
x

instance IsLabel "xxyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
y

instance IsLabel "xxyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
z

instance IsLabel "xxzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
x

instance IsLabel "xxzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
y

instance IsLabel "xxzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
z

instance IsLabel "xyxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
x

instance IsLabel "xyxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
y

instance IsLabel "xyxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
z

instance IsLabel "xyyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
x

instance IsLabel "xyyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
y

instance IsLabel "xyyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
z

instance IsLabel "xyzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
z Float
x

instance IsLabel "xyzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
z Float
y

instance IsLabel "xyzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
z Float
z

instance IsLabel "xzxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
x

instance IsLabel "xzxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
y

instance IsLabel "xzxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
z

instance IsLabel "xzyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
x

instance IsLabel "xzyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
y

instance IsLabel "xzyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
z

instance IsLabel "xzzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
x

instance IsLabel "xzzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
y

instance IsLabel "xzzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
z

instance IsLabel "yxxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
x

instance IsLabel "yxxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
y

instance IsLabel "yxxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
z

instance IsLabel "yxyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
x

instance IsLabel "yxyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
y

instance IsLabel "yxyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
z

instance IsLabel "yxzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
x

instance IsLabel "yxzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
y

instance IsLabel "yxzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
z

instance IsLabel "yyxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
x

instance IsLabel "yyxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
y

instance IsLabel "yyxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
z

instance IsLabel "yyyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
x

instance IsLabel "yyyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
y

instance IsLabel "yyyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
z

instance IsLabel "yyzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
x

instance IsLabel "yyzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
y

instance IsLabel "yyzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
z

instance IsLabel "yzxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
x

instance IsLabel "yzxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
y

instance IsLabel "yzxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
z

instance IsLabel "yzyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
x

instance IsLabel "yzyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
y

instance IsLabel "yzyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
z

instance IsLabel "yzzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
x

instance IsLabel "yzzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
y

instance IsLabel "yzzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
z

instance IsLabel "zxxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
x

instance IsLabel "zxxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
y

instance IsLabel "zxxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
z

instance IsLabel "zxyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
x

instance IsLabel "zxyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
y

instance IsLabel "zxyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
z

instance IsLabel "zxzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
x

instance IsLabel "zxzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
y

instance IsLabel "zxzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
z

instance IsLabel "zyxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
x

instance IsLabel "zyxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
y

instance IsLabel "zyxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
z

instance IsLabel "zyyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
x

instance IsLabel "zyyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
y

instance IsLabel "zyyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
z

instance IsLabel "zyzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
x

instance IsLabel "zyzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
y

instance IsLabel "zyzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
z

instance IsLabel "zzxx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
x

instance IsLabel "zzxy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
y

instance IsLabel "zzxz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
z

instance IsLabel "zzyx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
x

instance IsLabel "zzyy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
y

instance IsLabel "zzyz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
z

instance IsLabel "zzzx" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
x Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
x

instance IsLabel "zzzy" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
y Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
y

instance IsLabel "zzzz" (Swizzle Vec4 Vec3) where
  fromLabel :: Swizzle Vec4 Vec3
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec3
v -> forall r. Vec3 -> (Float -> Float -> Float -> r) -> r
withVec3 Vec3
v \Float
_ Float
_ Float
z -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
z

-- * From Vec4

-- ** To Float

instance IsLabel "x" (Swizzle Float Vec4) where
  fromLabel :: Swizzle Float Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
_ -> Float
x

instance IsLabel "y" (Swizzle Float Vec4) where
  fromLabel :: Swizzle Float Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
_ -> Float
y

instance IsLabel "z" (Swizzle Float Vec4) where
  fromLabel :: Swizzle Float Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
_ -> Float
z

instance IsLabel "w" (Swizzle Float Vec4) where
  fromLabel :: Swizzle Float Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
_ Float
w -> Float
w

-- ** To Vec2

instance IsLabel "xx" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
_ -> Float -> Float -> Vec2
vec2 Float
x Float
x

instance IsLabel "xy" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Vec2
vec2 Float
x Float
y

instance IsLabel "xz" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Vec2
vec2 Float
x Float
z

instance IsLabel "xw" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Vec2
vec2 Float
x Float
w

instance IsLabel "yx" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Vec2
vec2 Float
y Float
x

instance IsLabel "yy" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
_ -> Float -> Float -> Vec2
vec2 Float
y Float
y

instance IsLabel "yz" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Vec2
vec2 Float
y Float
z

instance IsLabel "yw" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Vec2
vec2 Float
y Float
w

instance IsLabel "zx" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Vec2
vec2 Float
z Float
x

instance IsLabel "zy" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Vec2
vec2 Float
z Float
y

instance IsLabel "zz" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
_ -> Float -> Float -> Vec2
vec2 Float
z Float
z

instance IsLabel "zw" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Vec2
vec2 Float
z Float
w

instance IsLabel "wx" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Vec2
vec2 Float
w Float
x

instance IsLabel "wy" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Vec2
vec2 Float
w Float
y

instance IsLabel "wz" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Vec2
vec2 Float
w Float
z

instance IsLabel "ww" (Swizzle Vec2 Vec4) where
  fromLabel :: Swizzle Vec2 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
_ Float
w -> Float -> Float -> Vec2
vec2 Float
w Float
w

-- ** To Vec3

instance IsLabel "xxx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
x

instance IsLabel "xxy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
y

instance IsLabel "xxz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
z

instance IsLabel "xxw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
x Float
w

instance IsLabel "xyx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
x

instance IsLabel "xyy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
y

instance IsLabel "xyz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
z

instance IsLabel "xyw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
y Float
w

instance IsLabel "xzx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
x

instance IsLabel "xzy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
y

instance IsLabel "xzz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
z

instance IsLabel "xzw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
z Float
w

instance IsLabel "xwx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
w Float
x

instance IsLabel "xwy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
w Float
y

instance IsLabel "xwz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
w Float
z

instance IsLabel "xww" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
x Float
w Float
w

instance IsLabel "yxx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
x

instance IsLabel "yxy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
y

instance IsLabel "yxz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
z

instance IsLabel "yxw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
x Float
w

instance IsLabel "yyx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
x

instance IsLabel "yyy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
y

instance IsLabel "yyz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
z

instance IsLabel "yyw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
y Float
w

instance IsLabel "yzx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
x

instance IsLabel "yzy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
y

instance IsLabel "yzz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
z

instance IsLabel "yzw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
z Float
w

instance IsLabel "ywx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
w Float
x

instance IsLabel "ywy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
w Float
y

instance IsLabel "ywz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
w Float
z

instance IsLabel "yww" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
y Float
w Float
w

instance IsLabel "zxx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
x

instance IsLabel "zxy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
y

instance IsLabel "zxz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
z

instance IsLabel "zxw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
x Float
w

instance IsLabel "zyx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
x

instance IsLabel "zyy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
y

instance IsLabel "zyz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
z

instance IsLabel "zyw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
y Float
w

instance IsLabel "zzx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
x

instance IsLabel "zzy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
y

instance IsLabel "zzz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
_ -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
z

instance IsLabel "zzw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
z Float
w

instance IsLabel "zwx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
w Float
x

instance IsLabel "zwy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
w Float
y

instance IsLabel "zwz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
w Float
z

instance IsLabel "zww" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
z Float
w Float
w

instance IsLabel "wxx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
x Float
x

instance IsLabel "wxy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
x Float
y

instance IsLabel "wxz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
x Float
z

instance IsLabel "wxw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
x Float
w

instance IsLabel "wyx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
y Float
x

instance IsLabel "wyy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
y Float
y

instance IsLabel "wyz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
y Float
z

instance IsLabel "wyw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
y Float
w

instance IsLabel "wzx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
z Float
x

instance IsLabel "wzy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
z Float
y

instance IsLabel "wzz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
z Float
z

instance IsLabel "wzw" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
z Float
w

instance IsLabel "wwx" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
w Float
x

instance IsLabel "wwy" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
w Float
y

instance IsLabel "wwz" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
w Float
z

instance IsLabel "www" (Swizzle Vec3 Vec4) where
  fromLabel :: Swizzle Vec3 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
_ Float
w -> Float -> Float -> Float -> Vec3
vec3 Float
w Float
w Float
w

-- ** To Vec4

instance IsLabel "xxxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
x

instance IsLabel "xxxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
y

instance IsLabel "xxxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
z

instance IsLabel "xxxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
x Float
w

instance IsLabel "xxyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
x

instance IsLabel "xxyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
y

instance IsLabel "xxyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
z

instance IsLabel "xxyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
y Float
w

instance IsLabel "xxzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
x

instance IsLabel "xxzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
y

instance IsLabel "xxzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
z

instance IsLabel "xxzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
z Float
w

instance IsLabel "xxwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
w Float
x

instance IsLabel "xxwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
w Float
y

instance IsLabel "xxwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
w Float
z

instance IsLabel "xxww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
x Float
w Float
w

instance IsLabel "xyxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
x

instance IsLabel "xyxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
y

instance IsLabel "xyxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
z

instance IsLabel "xyxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
x Float
w

instance IsLabel "xyyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
x

instance IsLabel "xyyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
y

instance IsLabel "xyyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
z

instance IsLabel "xyyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
y Float
w

instance IsLabel "xyzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
z Float
x

instance IsLabel "xyzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
z Float
y

instance IsLabel "xyzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
z Float
z

instance IsLabel "xywx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
w Float
x

instance IsLabel "xywy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
w Float
y

instance IsLabel "xywz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
w Float
z

instance IsLabel "xyww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
y Float
w Float
w

instance IsLabel "xzxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
x

instance IsLabel "xzxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
y

instance IsLabel "xzxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
z

instance IsLabel "xzxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
x Float
w

instance IsLabel "xzyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
x

instance IsLabel "xzyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
y

instance IsLabel "xzyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
z

instance IsLabel "xzyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
y Float
w

instance IsLabel "xzzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
x

instance IsLabel "xzzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
y

instance IsLabel "xzzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
z

instance IsLabel "xzzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
z Float
w

instance IsLabel "xzwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
w Float
x

instance IsLabel "xzwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
w Float
y

instance IsLabel "xzwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
w Float
z

instance IsLabel "xzww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
z Float
w Float
w

instance IsLabel "xwxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
x Float
x

instance IsLabel "xwxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
x Float
y

instance IsLabel "xwxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
x Float
z

instance IsLabel "xwxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
x Float
w

instance IsLabel "xwyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
y Float
x

instance IsLabel "xwyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
y Float
y

instance IsLabel "xwyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
y Float
z

instance IsLabel "xwyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
y Float
w

instance IsLabel "xwzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
z Float
x

instance IsLabel "xwzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
z Float
y

instance IsLabel "xwzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
z Float
z

instance IsLabel "xwzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
z Float
w

instance IsLabel "xwwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
w Float
x

instance IsLabel "xwwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
w Float
y

instance IsLabel "xwwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
w Float
z

instance IsLabel "xwww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
x Float
w Float
w Float
w

instance IsLabel "yxxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
x

instance IsLabel "yxxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
y

instance IsLabel "yxxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
z

instance IsLabel "yxxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
x Float
w

instance IsLabel "yxyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
x

instance IsLabel "yxyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
y

instance IsLabel "yxyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
z

instance IsLabel "yxyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
y Float
w

instance IsLabel "yxzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
x

instance IsLabel "yxzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
y

instance IsLabel "yxzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
z

instance IsLabel "yxzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
z Float
w

instance IsLabel "yxwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
w Float
x

instance IsLabel "yxwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
w Float
y

instance IsLabel "yxwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
w Float
z

instance IsLabel "yxww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
x Float
w Float
w

instance IsLabel "yyxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
x

instance IsLabel "yyxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
y

instance IsLabel "yyxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
z

instance IsLabel "yyxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
x Float
w

instance IsLabel "yyyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
x

instance IsLabel "yyyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
y

instance IsLabel "yyyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
z

instance IsLabel "yyyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
y Float
w

instance IsLabel "yyzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
x

instance IsLabel "yyzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
y

instance IsLabel "yyzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
z

instance IsLabel "yyzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
z Float
w

instance IsLabel "yywx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
w Float
x

instance IsLabel "yywy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
w Float
y

instance IsLabel "yywz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
w Float
z

instance IsLabel "yyww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
y Float
w Float
w

instance IsLabel "yzxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
x

instance IsLabel "yzxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
y

instance IsLabel "yzxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
z

instance IsLabel "yzxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
x Float
w

instance IsLabel "yzyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
x

instance IsLabel "yzyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
y

instance IsLabel "yzyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
z

instance IsLabel "yzyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
y Float
w

instance IsLabel "yzzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
x

instance IsLabel "yzzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
y

instance IsLabel "yzzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
z

instance IsLabel "yzzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
z Float
w

instance IsLabel "yzwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
w Float
x

instance IsLabel "yzwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
w Float
y

instance IsLabel "yzwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
w Float
z

instance IsLabel "yzww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
z Float
w Float
w

instance IsLabel "ywxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
x Float
x

instance IsLabel "ywxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
x Float
y

instance IsLabel "ywxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
x Float
z

instance IsLabel "ywxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
x Float
w

instance IsLabel "ywyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
y Float
x

instance IsLabel "ywyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
y Float
y

instance IsLabel "ywyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
y Float
z

instance IsLabel "ywyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
y Float
w

instance IsLabel "ywzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
z Float
x

instance IsLabel "ywzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
z Float
y

instance IsLabel "ywzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
z Float
z

instance IsLabel "ywzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
z Float
w

instance IsLabel "ywwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
w Float
x

instance IsLabel "ywwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
w Float
y

instance IsLabel "ywwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
w Float
z

instance IsLabel "ywww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
y Float
w Float
w Float
w

instance IsLabel "zxxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
x

instance IsLabel "zxxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
y

instance IsLabel "zxxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
z

instance IsLabel "zxxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
x Float
w

instance IsLabel "zxyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
x

instance IsLabel "zxyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
y

instance IsLabel "zxyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
z

instance IsLabel "zxyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
y Float
w

instance IsLabel "zxzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
x

instance IsLabel "zxzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
y

instance IsLabel "zxzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
z

instance IsLabel "zxzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
z Float
w

instance IsLabel "zxwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
w Float
x

instance IsLabel "zxwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
w Float
y

instance IsLabel "zxwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
w Float
z

instance IsLabel "zxww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
x Float
w Float
w

instance IsLabel "zyxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
x

instance IsLabel "zyxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
y

instance IsLabel "zyxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
z

instance IsLabel "zyxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
x Float
w

instance IsLabel "zyyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
x

instance IsLabel "zyyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
y

instance IsLabel "zyyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
z

instance IsLabel "zyyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
y Float
w

instance IsLabel "zyzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
x

instance IsLabel "zyzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
y

instance IsLabel "zyzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
z

instance IsLabel "zyzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
z Float
w

instance IsLabel "zywx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
w Float
x

instance IsLabel "zywy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
w Float
y

instance IsLabel "zywz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
w Float
z

instance IsLabel "zyww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
y Float
w Float
w

instance IsLabel "zzxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
x

instance IsLabel "zzxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
y

instance IsLabel "zzxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
z

instance IsLabel "zzxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
x Float
w

instance IsLabel "zzyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
x

instance IsLabel "zzyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
y

instance IsLabel "zzyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
z

instance IsLabel "zzyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
y Float
w

instance IsLabel "zzzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
x

instance IsLabel "zzzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
y

instance IsLabel "zzzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
_ -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
z

instance IsLabel "zzzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
z Float
w

instance IsLabel "zzwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
w Float
x

instance IsLabel "zzwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
w Float
y

instance IsLabel "zzwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
w Float
z

instance IsLabel "zzww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
z Float
w Float
w

instance IsLabel "zwxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
x Float
x

instance IsLabel "zwxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
x Float
y

instance IsLabel "zwxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
x Float
z

instance IsLabel "zwxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
x Float
w

instance IsLabel "zwyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
y Float
x

instance IsLabel "zwyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
y Float
y

instance IsLabel "zwyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
y Float
z

instance IsLabel "zwyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
y Float
w

instance IsLabel "zwzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
z Float
x

instance IsLabel "zwzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
z Float
y

instance IsLabel "zwzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
z Float
z

instance IsLabel "zwzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
z Float
w

instance IsLabel "zwwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
w Float
x

instance IsLabel "zwwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
w Float
y

instance IsLabel "zwwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
w Float
z

instance IsLabel "zwww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
z Float
w Float
w Float
w

instance IsLabel "wxxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
x Float
x

instance IsLabel "wxxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
x Float
y

instance IsLabel "wxxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
x Float
z

instance IsLabel "wxxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
x Float
w

instance IsLabel "wxyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
y Float
x

instance IsLabel "wxyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
y Float
y

instance IsLabel "wxyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
y Float
z

instance IsLabel "wxyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
y Float
w

instance IsLabel "wxzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
z Float
x

instance IsLabel "wxzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
z Float
y

instance IsLabel "wxzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
z Float
z

instance IsLabel "wxzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
z Float
w

instance IsLabel "wxwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
w Float
x

instance IsLabel "wxwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
w Float
y

instance IsLabel "wxwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
w Float
z

instance IsLabel "wxww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
x Float
w Float
w

instance IsLabel "wyxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
x Float
x

instance IsLabel "wyxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
x Float
y

instance IsLabel "wyxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
x Float
z

instance IsLabel "wyxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
x Float
w

instance IsLabel "wyyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
y Float
x

instance IsLabel "wyyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
y Float
y

instance IsLabel "wyyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
y Float
z

instance IsLabel "wyyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
y Float
w

instance IsLabel "wyzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
z Float
x

instance IsLabel "wyzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
z Float
y

instance IsLabel "wyzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
z Float
z

instance IsLabel "wyzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
z Float
w

instance IsLabel "wywx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
w Float
x

instance IsLabel "wywy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
w Float
y

instance IsLabel "wywz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
w Float
z

instance IsLabel "wyww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
y Float
w Float
w

instance IsLabel "wzxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
x Float
x

instance IsLabel "wzxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
x Float
y

instance IsLabel "wzxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
x Float
z

instance IsLabel "wzxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
x Float
w

instance IsLabel "wzyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
y Float
x

instance IsLabel "wzyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
y Float
y

instance IsLabel "wzyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
y Float
z

instance IsLabel "wzyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
y Float
w

instance IsLabel "wzzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
z Float
x

instance IsLabel "wzzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
z Float
y

instance IsLabel "wzzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
z Float
z

instance IsLabel "wzzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
z Float
w

instance IsLabel "wzwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
w Float
x

instance IsLabel "wzwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
w Float
y

instance IsLabel "wzwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
w Float
z

instance IsLabel "wzww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
z Float
w Float
w

instance IsLabel "wwxx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
x Float
x

instance IsLabel "wwxy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
x Float
y

instance IsLabel "wwxz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
x Float
z

instance IsLabel "wwxw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
x Float
w

instance IsLabel "wwyx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
y Float
x

instance IsLabel "wwyy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
y Float
y

instance IsLabel "wwyz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
y Float
z

instance IsLabel "wwyw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
y Float
w

instance IsLabel "wwzx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
z Float
x

instance IsLabel "wwzy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
z Float
y

instance IsLabel "wwzz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
z Float
z

instance IsLabel "wwzw" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
z Float
w

instance IsLabel "wwwx" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
x Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
w Float
x

instance IsLabel "wwwy" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
y Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
w Float
y

instance IsLabel "wwwz" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
z Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
w Float
z

instance IsLabel "wwww" (Swizzle Vec4 Vec4) where
  fromLabel :: Swizzle Vec4 Vec4
fromLabel = forall to fro. (fro -> to) -> Swizzle to fro
Swizzle \Vec4
v -> forall r. Vec4 -> (Float -> Float -> Float -> Float -> r) -> r
withVec4 Vec4
v \Float
_ Float
_ Float
_ Float
w -> Float -> Float -> Float -> Float -> Vec4
vec4 Float
w Float
w Float
w Float
w