packages feed

hylogen 0.1.2.1 → 0.1.2.2

raw patch · 15 files changed

+1427/−1260 lines, 15 files

Files

README.md view
@@ -12,11 +12,12 @@ - simple and pure syntax - standard operators (`+`, `*`, [`*^`,  `<.>`](https://hackage.haskell.org/package/vector-space)) - compat. w/ your fav haskell goodies (higher-order functions, ADTS, swanky polymorphism).+- compiles to GLSL  ![](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==) -It comes with `hylide`, a live WebGL renderer featuring:-- *hot-reloading*+It comes with `hylide`, a live WebGL renderer with:+- hot-reloading - audio-reactive primitives - texture backbuffering @@ -29,7 +30,7 @@ cabal install hylogen ``` -This will install the Hylogen package and Hylide, the live renderer.+This will install the Hylogen package and hylide, the live renderer.  ![](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==) @@ -52,7 +53,7 @@ main = putStrLn . toGLSL $ color ``` -Run Hylide:+Run hylide:  ``` $ hylide Main.hs@@ -86,7 +87,7 @@ } ``` -Hylide will recompile and and rerun `main` on file changes, sending fresh shaders to the WebGL renderer via websockets.+Hylide will recompile and and rerun `main` on file changes, sending fresh shaders to the WebGL context via websockets.   @@ -95,7 +96,7 @@  ## References - [The_Force](https://github.com/shawnlawson/The_Force) by Shawn Lawson. Live-coding audio-reactive shaders!-- [data-reify](https://hackage.haskell.org/package/data-reify) by Andy Gill, to keep compile times from exploding by preserving sharing from the GHC Heap. +- [data-reify](https://hackage.haskell.org/package/data-reify) by Andy Gill, to keep intermediate AST representations from exploding by preserving the GHC heap's internal sharing  ## Resources - [demo reel](https://hylogen.com)
hylogen.cabal view
@@ -1,5 +1,5 @@ name:                hylogen-version:             0.1.2.1+version:             0.1.2.2 synopsis:            an EDSL for live-coding fragment shaders description:         an EDSL for live-coding fragment shaders homepage:            https://hylogen.com@@ -18,10 +18,10 @@ library   exposed-modules:     Hylogen                      , Hylogen.Types-                     , Hylogen.Vec+                     , Hylogen.Types.Vec+                     , Hylogen.Types.Booly+                     , Hylogen.Types.Texture                      , Hylogen.Expr-                     , Hylogen.Booly-                     , Hylogen.Texture                      , Hylogen.Globals                      , Hylogen.Program                      , Hylogen.WithHylide
− src/Hylogen/Booly.hs
@@ -1,22 +0,0 @@-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE FlexibleInstances #-}-module Hylogen.Booly where--import Hylogen.Expr--data BoolyType = BoolyType-instance ToGLSLType BoolyType where-  toGLSLType _ = GLSLBool-  tag = BoolyType--type Booly = Expr BoolyType--instance Num Booly where-  (+) = op2 "||"-  (*) = op2 "&&"-  negate = op1 "!"-  abs = id-  signum = id-  fromInteger x-    | x > 0 = uniform "true"-    | otherwise = uniform "false"
src/Hylogen/Expr.hs view
@@ -12,11 +12,17 @@ {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE DeriveFunctor #-} +{- |+Internal AST representation.+-}  module Hylogen.Expr where + import Data.Reify ++-- | Internal type tag data GLSLType = GLSLFloat               | GLSLVec2               | GLSLVec3@@ -34,6 +40,7 @@     GLSLBool -> "bool"     GLSLTexture -> "sampler2D" +-- | Internal form tag data ExprForm = Uniform               | Variable               | Op1@@ -46,11 +53,14 @@               | Access                 deriving (Show) +-- | Rose tree. Internal AST data structure data Tree a  = Tree { getElem     :: a                     , getChildren :: [Tree a]                     }  +-- | Untyped Expr representation+-- Carries type information in type tag type ExprMono = Tree (ExprForm, GLSLType, String)  instance Show ExprMono where@@ -66,9 +76,11 @@     Select   -> mconcat ["( ", show (xs!!0), " ? ", show (xs!!1), " : ", show (xs!!2), ")"]     Access   -> mconcat [show (xs!!0), ".", str] --- The GLSLType needs to be manually dependent---- light typed wrapper+-- | Light type wrapper+--+-- Note the internal type tag is not directly dependent on the actual type!+--+-- We use the ToGLSLType typeclass to genenerate dependence from types to values data Expr ty = Expr { getTypeTag :: ty                     , toMono ::  Tree (ExprForm, GLSLType, String)                     }@@ -77,51 +89,70 @@   show = show . toMono  class ToGLSLType  ty where+  -- | Gives us dependence from typed singleton tags to untyped tags   toGLSLType :: ty -> GLSLType+  -- | Singleton tag   tag :: ty -- TODO: fill in! +-- | Uniform expression. uniform :: forall a            . ToGLSLType a            => String -> Expr a uniform str = Expr t (Tree (Uniform, toGLSLType t, str) [])   where t = tag :: a +-- | Unary operator.+-- Most generally typed. op1 :: forall a b        . (ToGLSLType a, ToGLSLType b)        => String -> Expr a -> Expr b op1 str a = Expr t (Tree (Op1, toGLSLType t, str) [toMono a])   where t = tag :: b +-- | Unary operator.+-- Input and output values have the same type. op1'' :: forall a        . (ToGLSLType a)        => String -> Expr a -> Expr a op1'' str a = Expr t (Tree (Op1, toGLSLType t, str) [toMono a])   where t = tag :: a +-- | Unary operator.+-- Prefix function call style.+-- Most generally typed. op1pre :: forall a b           . (ToGLSLType a, ToGLSLType b)           => String -> Expr a -> Expr b op1pre str a = Expr t (Tree (Op1Pre, toGLSLType t, str) [toMono a])   where t = tag :: b +-- | Unary operator.+-- Prefix function call style.+-- Input and output values have the same type. op1pre'' :: forall a           . (ToGLSLType a)           => String -> Expr a -> Expr a op1pre'' str a = Expr t (Tree (Op1Pre, toGLSLType t, str) [toMono a])   where t = tag :: a +-- | Binary operator.+-- Most generally typed. op2 :: forall a b c        . (ToGLSLType a, ToGLSLType b, ToGLSLType c)        => String -> Expr a -> Expr b -> Expr c op2 str a b = Expr t (Tree (Op2, toGLSLType t, str) [toMono a, toMono b])   where t = tag :: c +-- | Binary operator.+-- Arguments have the same type. op2' :: forall a c        . (ToGLSLType a, ToGLSLType c)        => String -> Expr a -> Expr a -> Expr c op2' str a b = Expr t (Tree (Op2, toGLSLType t, str) (fmap toMono [a, b]))   where t = tag :: c +-- | Binary operator.+-- Input and output values have the same type. op2'' :: forall a        . (ToGLSLType a)        => String -> Expr a -> Expr a -> Expr a@@ -129,36 +160,54 @@   where t = tag :: a  +-- | Binary operator.+-- Prefix function call style.+-- Most generally typed. op2pre :: forall a b c           . (ToGLSLType a, ToGLSLType b, ToGLSLType c)           => String -> Expr a -> Expr b -> Expr c op2pre str a b = Expr t (Tree (Op2Pre, toGLSLType t, str) [toMono a, toMono b])   where t = tag :: c +-- | Binary operator.+-- Prefix function call style.+-- Arguments have the same type. op2pre' :: forall a c        . (ToGLSLType a, ToGLSLType c)        => String -> Expr a -> Expr a -> Expr c op2pre' str a b = Expr t (Tree (Op2Pre, toGLSLType t, str) (fmap toMono [a, b]))   where t = tag :: c +-- | Binary operator.+-- Prefix function call style.+-- Input and output values have the same type. op2pre'' :: forall a        . (ToGLSLType a)        => String -> Expr a -> Expr a -> Expr a op2pre'' str a b = Expr t (Tree (Op2Pre, toGLSLType t, str) (fmap toMono [a, b]))   where t = tag :: a +-- | Ternary operator.+-- Prefix function call style.+-- Most generally typed. op3pre :: forall a b c d           . (ToGLSLType a, ToGLSLType b, ToGLSLType c, ToGLSLType d)           => String -> Expr a -> Expr b -> Expr c -> Expr d op3pre str a b c = Expr t (Tree (Op3Pre, toGLSLType t, str) [toMono a, toMono b, toMono c])   where t = tag :: d +-- | Ternary operator.+-- Prefix function call style.+-- Arguments have the same type. op3pre' :: forall a d           . (ToGLSLType a, ToGLSLType d)           => String -> Expr a -> Expr a -> Expr a -> Expr d op3pre' str a b c = Expr t (Tree (Op3Pre, toGLSLType t, str) (fmap toMono [a, b, c]))   where t = tag :: d +-- | Ternary operator.+-- Prefix function call style.+-- Input and output values have the same type. op3pre'' :: forall a           . (ToGLSLType a)           => String -> Expr a -> Expr a -> Expr a -> Expr a@@ -166,18 +215,27 @@   where t = tag :: a  +-- | Quaternary operator.+-- Prefix function call style.+-- Most generally typed. op4pre :: forall a b c d e           . (ToGLSLType a, ToGLSLType b, ToGLSLType c, ToGLSLType d, ToGLSLType e)           => String -> Expr a -> Expr b -> Expr c -> Expr d -> Expr e op4pre str a b c d = Expr t (Tree (Op4Pre, toGLSLType t, str) [toMono a, toMono b, toMono c, toMono d])   where t = tag :: e +-- | Quaternary operator.+-- Prefix function call style.+-- Arguments have the same type. op4pre' :: forall a e           . (ToGLSLType a, ToGLSLType e)           => String -> Expr a -> Expr a -> Expr a -> Expr a -> Expr e op4pre' str a b c d = Expr t (Tree (Op4Pre, toGLSLType t, str) (fmap toMono [a, b, c, d]))   where t = tag :: e +-- | Quaternary operator.+-- Prefix function call style.+-- Input and output values have the same type. op4pre'' :: forall a e           . (ToGLSLType a, ToGLSLType e)           => String -> Expr a -> Expr a -> Expr a -> Expr a -> Expr e@@ -187,13 +245,22 @@   +-- | Open tree type, to be used for explicit recursion with data-reify for preserving sharing.+--+-- Note the second argument of the constructor is a list of Maybe b's.+-- We use Maybe's to determine whether or not a child expression gets inlined. data TreeF a b = TreeF { getElemF     :: a                        , getChildrenF   :: [Maybe b]                        }                  deriving (Functor) +-- | Open untyped expression representation, to be used for explicit recursion with data-reify for preserving sharing.+--+-- Note the presence of a list of closed ExprMono's in the tuple.+-- We use this list to recover unshared child expressions when they need to be inlined. type ExprMonoF = TreeF (ExprForm, GLSLType, String, [ExprMono]) +-- | Returns the string representation of the nth child of an open untyped expression, accounting for inlining emfStringAt :: (Show a) => ExprMonoF a -> Int -> String emfStringAt (TreeF (_, _, _, xs) ys)  i = zipWith fn xs ys !! i   where@@ -215,10 +282,7 @@     where       strAt = emfStringAt expr --- instance MuRef ExprMono where---   type DeRef ExprMono = ExprMonoF---   mapDeRef f (Tree tup xs) = TreeF tup <$> traverse f xs-+-- | Currently only inlines uniforms. instance MuRef ExprMono where   type DeRef ExprMono = ExprMonoF   mapDeRef func (Tree (form, ty, str) xs) = TreeF (form, ty, str, xs) <$> g xs
src/Hylogen/Globals.hs view
@@ -9,11 +9,11 @@ import Hylogen.Expr  --- Geometric functions-+-- | Length of a vector len :: forall n. (Veccable n) => Vec n -> Vec1 len = op1pre "length" +-- | Euclidean distance between two points distance :: forall n. (Veccable n) => Vec n -> Vec n -> Vec n distance = op2pre'' "distance" @@ -23,12 +23,29 @@ normalize :: forall n. (Veccable n) => Vec n -> Vec n normalize = op1pre'' "normalize" +-- | Returns a vector pointing in the same direction as another+--+-- @+-- faceforward toOrient incident reference  -- == oriented+-- @ faceForward :: forall n. (Veccable n) => Vec n -> Vec n -> Vec n -> Vec n faceForward = op3pre'' "faceforward" +-- | Calculates the reflection direction for an incident vector+--+-- @+-- reflect incident normal -- == reflected+-- @ reflect :: forall n. (Veccable n) => Vec n -> Vec n -> Vec n reflect = op2pre'' "reflect" +-- | Calculates the refraction direction direction for an incident vector+--+-- @+-- refract incident normal eta -- == reflected+-- @+--+-- where eta is the ratio of indicies of refraction refract :: forall n. (Veccable n) => Vec n -> Vec n -> Vec1 -> Vec n refract = op3pre "refract" @@ -36,6 +53,7 @@ inverseSqrt :: forall n. (Veccable n) => Vec n -> Vec n inverseSqrt = op1pre'' "inversesqrt" +-- | Fractional part fract :: forall n. (Veccable n) => Vec n -> Vec n fract = op1pre'' "fract" @@ -54,21 +72,27 @@ max_ :: forall n. (Veccable n) => Vec n -> Vec n -> Vec n max_ = op2pre'' "max" +-- | Clamps x between min and max+--+-- @+-- clamp min max x -- == clamped+-- @ clamp :: forall n. (Veccable n) => Vec n -> Vec n -> Vec n -> Vec n-clamp x y z = (z `min_` y) `max_` x+clamp mn mx x = op3pre'' "clamp" x mn mx  -linexp :: (Floating a) => (a, a, a, a) -> a -> a-linexp (a, b, c, d) x = c * ((d / c) ** ((x - a) / (b - a))) -linlin :: (Floating a) => (a, a, a, a) -> a -> a-linlin (a, b, c, d) x = c + (d - c) * ((x - a) / (b - a))  -+-- | Linear interpolation between x and y by p, a Vec1 from 0 to 1+--+-- @+-- mix p x y = x ^* (1 - p) + y ^* p+-- -- mix 0 x y == x+-- -- mix 1 x y == y+-- @ mix :: (Veccable n) => Vec1 -> Vec n -> Vec n -> Vec n mix p x y = op3pre "mix" x y p--- mix p x y = x ^* (1 - p) + y ^* p  true :: Booly true = uniform "true"@@ -76,10 +100,10 @@ false :: Booly false = uniform "false" +-- | Helper function to compare vectors bcomp :: (Veccable v) => String -> Vec v -> Vec v -> Booly bcomp str x y = product $ zipWith (op2' str) (toList x) (toList y) - eq :: (Veccable v) => Vec v -> Vec v -> Booly eq = bcomp "==" @@ -98,9 +122,17 @@ geq :: (Veccable v) => Vec v -> Vec v -> Booly geq = bcomp ">=" +-- | Returns rgba value given a texture and texture coordinates+-- texture coordinates start at 0 1 texture2D :: Texture -> Vec2 -> Vec4 texture2D = op2pre "texture2D" +-- | Selection function+--+-- @ sel bool x y @+-- is akin to+--+-- @ bool ? x : y @ in C-like languages sel :: forall a           . (ToGLSLType a)           => Booly -> Expr a -> Expr a -> Expr a
src/Hylogen/Program.hs view
@@ -1,18 +1,25 @@+{- |+Internal shader program representation.+-}+ module Hylogen.Program where + import Data.Reify import Data.Monoid import System.IO.Unsafe  import Hylogen.Expr --- Just for printing! newtype Id = Id Int instance Show Id where   show (Id h) = "_" <> show h +-- | Statement internal representation+--+-- We tag a Statement with a Unique ID and its corresponding untyped expression data Statement = NewAssign (Unique, ExprMonoF Unique)-               -- | MutAssign (Unique, ExprMonoF Unique)+               -- MutAssign (Unique, ExprMonoF Unique)  getExpr :: Statement -> ExprMonoF Unique getExpr (NewAssign (_, expr)) = expr@@ -23,6 +30,9 @@   show (NewAssign (i, expr@(TreeF (_, ty, _, _) _)))     = mconcat [ show ty, " ", show . Id $ i, " = ", show . (Id<$>) $  expr, ";"] +-- | GLSL Function internal representation+--+-- A Function is composed of Statements. newtype Function = Function [Statement] instance Show Function where   show (Function xs) = unlines [ "void main() {"@@ -34,6 +44,7 @@       assignments = mconcat $  (<> "\n") . ("    "<>) . show <$> reverse xs  +-- | Returns a program given an expression in closed untyped form toProgram :: ExprMono -> Function toProgram v = unsafePerformIO $ do   Graph nodes _ <- reifyGraph v
− src/Hylogen/Texture.hs
@@ -1,14 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE FlexibleInstances #-}--module Hylogen.Texture where--import Hylogen.Expr--data TextureType = TextureType-instance ToGLSLType TextureType where-  toGLSLType _ = GLSLTexture-  tag = TextureType--type Texture = Expr TextureType
src/Hylogen/Types.hs view
@@ -1,9 +1,9 @@-module Hylogen.Types ( module Hylogen.Vec-                     , module Hylogen.Booly-                     , module Hylogen.Texture+module Hylogen.Types ( module Hylogen.Types.Vec+                     , module Hylogen.Types.Booly+                     , module Hylogen.Types.Texture                      ) where -import Hylogen.Vec hiding (FloatVec, mkSwizz)-import Hylogen.Booly hiding (BoolyType)-import Hylogen.Texture hiding (TextureType)+import Hylogen.Types.Vec hiding (FloatVec, mkSwizz)+import Hylogen.Types.Booly hiding (BoolyType)+import Hylogen.Types.Texture hiding (TextureType) 
+ src/Hylogen/Types/Booly.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}+module Hylogen.Types.Booly where++import Hylogen.Expr++-- | Booly singleton type tag+data BoolyType = BoolyType+instance ToGLSLType BoolyType where+  toGLSLType _ = GLSLBool+  tag = BoolyType++type Booly = Expr BoolyType++-- | We use Num operators for Boolean arithmetic:+instance Num Booly where+  -- | Or+  (+) = op2 "||"+  -- | And+  (*) = op2 "&&"+  negate = op1 "!"+  abs = id+  signum = id+  fromInteger x+    | x > 0 = uniform "true"+    | otherwise = uniform "false"
+ src/Hylogen/Types/Texture.hs view
@@ -0,0 +1,15 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}++module Hylogen.Types.Texture where++import Hylogen.Expr++-- | Texture singleton type tag+data TextureType = TextureType+instance ToGLSLType TextureType where+  toGLSLType _ = GLSLTexture+  tag = TextureType++type Texture = Expr TextureType
+ src/Hylogen/Types/Vec.hs view
@@ -0,0 +1,1194 @@+{-# LANGUAGE GADTs #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE InstanceSigs #-}+++module Hylogen.Types.Vec where++import GHC.TypeLits+import Data.VectorSpace++import Hylogen.Expr+++-- | Floating vector singleton type tag+data FloatVec (n :: Nat) = FloatVec++type Vec n = Expr (FloatVec n)+type Vec1 = Vec 1+type Vec2 = Vec 2+type Vec3 = Vec 3+type Vec4 = Vec 4++instance ToGLSLType (FloatVec 1) where+  toGLSLType _ = GLSLFloat+  tag = FloatVec+instance ToGLSLType (FloatVec 2) where+  toGLSLType _ = GLSLVec2+  tag = FloatVec+instance ToGLSLType (FloatVec 3) where+  toGLSLType _ = GLSLVec3+  tag = FloatVec+instance ToGLSLType (FloatVec 4) where+  toGLSLType _ = GLSLVec4+  tag = FloatVec++++-- | A Nat is veccable if it can be the dimension of a GLSL vector+class (ToGLSLType (FloatVec n), KnownNat n) => Veccable n where+  -- | Creates a Vec n from a Vec1+  copy :: Vec1 -> Vec n+  -- | Transforms a Vec n into a list of Vec1's+  toList :: Vec n -> [Vec1]+++instance Veccable 1 where+  copy = id+  toList v = [v]+instance Veccable 2 where+  copy v = op2pre' "vec2" v v +  toList v = [x_ v, y_ v]+instance Veccable 3 where+  copy v = op3pre' "vec3" v v v+  toList v = [x_ v, y_ v, z_ v]+instance Veccable 4 where+  copy v = op4pre' "vec4" v v v v+  toList v = [x_ v, y_ v, z_ v]++++instance (Veccable n) => Num (Vec n) where+  (+) = op2' "+"+  (-) = op2' "-"+  (*) = op2' "*"+  abs = op1pre "abs"+  signum = op1pre "sign"+  negate = op1 "-"+  fromInteger x = copy . uniform . show $ (fromInteger x :: Float)+++instance (Veccable n) => Fractional (Vec n) where+  (/) = op2' "/"+  fromRational x = copy . uniform . show $ (fromRational x :: Float)++instance (Veccable n) => Floating (Vec n) where+  -- pi = copy $ uniform "pi"+  pi = copy $ uniform "3.141592653589793238462643383"+  exp = op1pre "exp"+  log = op1pre "log"+  sqrt = op1pre "sqrt"+  (**) = op2pre' "pow"+  sin = op1pre "sin"+  cos = op1pre "cos"+  tan = op1pre "tan"+  asin = op1pre "asin"+  acos = op1pre "acos"+  atan = op1pre "atan"+  sinh x = (exp x - exp (negate x)) / 2+  cosh x = (exp x + exp (negate x))/2+  tanh x = sinh x / cosh x+  asinh x = log $ x + sqrt(x**2 + 1)+  acosh x = log $ x + sqrt(x**2 - 1)+  atanh x = 0.5 * log ((1 + x)/(1 - x))++instance Veccable n => AdditiveGroup (Vec n) where+  zeroV = 0+  (^+^) = (+)+  negateV = negate+  (^-^) = (-)++instance Veccable n => VectorSpace (Vec n) where+  type Scalar (Vec n) = Vec 1+  a *^ b = copy a * b++instance Veccable n => InnerSpace (Vec n) where+  a <.> b = Expr fv (Tree (Op2Pre, GLSLFloat, "dot") (fmap toMono [a, b]))+    where fv = FloatVec :: FloatVec 1+++  +++-- | Exposed constructor for making vec2's+vec2 :: (Vec1, Vec1) -> Vec2+vec2 (x, y) = op2pre' "vec2" x y+++class ToVec3 tuple where+  -- | Exposed constructor for making vec3's+  vec3 :: tuple -> Vec3++instance (a ~ Vec m, b ~ Vec (3 - m)) => ToVec3 (a, b) where+  vec3 (x, y) = Expr fv (Tree (Op2Pre, toGLSLType fv, "vec3") [toMono x, toMono y])+      where fv = FloatVec :: FloatVec 3++instance (a ~ Vec1, b ~ Vec1, c ~ Vec1) => ToVec3 (a, b, c) where+  vec3 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec3") (fmap toMono [x, y, z]))+      where fv = FloatVec :: FloatVec 3+++class ToVec4 tuple where+  -- | Exposed constructor for making vec4's+  vec4 :: tuple -> Vec4++instance (a ~ Vec m, b ~ Vec (4 - m)) => ToVec4 (a, b) where+  vec4 (x, y) = Expr fv (Tree (Op2Pre, toGLSLType fv, "vec4") [toMono x,toMono y])+      where fv = FloatVec :: FloatVec 4++instance {-#INCOHERENT#-} (b ~ Vec1, c ~ Vec1) => ToVec4 (Vec2, b, c) where+  vec4 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec4") [toMono x,toMono y,toMono z])+      where fv = FloatVec :: FloatVec 4++instance {-#INCOHERENT#-} (a ~ Vec1, c ~ Vec1) => ToVec4 (a, Vec2, c) where+  vec4 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec4") [toMono x,toMono y,toMono z])+      where fv = FloatVec :: FloatVec 4++instance {-#INCOHERENT#-} (a ~ Vec1, b ~ Vec1) => ToVec4 (a, b, Vec2) where+  vec4 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec4") [toMono x,toMono y,toMono z])+      where fv = FloatVec :: FloatVec 4+++instance (a ~ Vec1, b ~ Vec1, c ~ Vec1, d ~ Vec1) => ToVec4 (a, b, c, d) where+  vec4 (x, y, z, w) = Expr fv (Tree (Op4Pre, toGLSLType fv, "vec4") (fmap toMono [x, y, z, w]))+      where fv = FloatVec :: FloatVec 4+++type (>=) x y = (x + 1 <=? y) ~ 'False++-- | Makes swizzle functions. Uses GenSwizz.hs to generate the following 340 swizzle expressions.+mkSwizz :: forall n m. (Veccable n, Veccable m) => String -> Vec n -> Vec m+mkSwizz str v = Expr fv (Tree (Access, toGLSLType fv, str) [toMono v])+  where+    fv = FloatVec :: FloatVec m++xxxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xxxx_ = mkSwizz "xxxx"++yxxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yxxx_ = mkSwizz "yxxx"++zxxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxxx_ = mkSwizz "zxxx"++wxxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxxx_ = mkSwizz "wxxx"++xxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+xxx_ = mkSwizz "xxx"++xyxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xyxx_ = mkSwizz "xyxx"++yyxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yyxx_ = mkSwizz "yyxx"++zyxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyxx_ = mkSwizz "zyxx"++wyxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyxx_ = mkSwizz "wyxx"++yxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+yxx_ = mkSwizz "yxx"++xzxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzxx_ = mkSwizz "xzxx"++yzxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzxx_ = mkSwizz "yzxx"++zzxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzxx_ = mkSwizz "zzxx"++wzxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzxx_ = mkSwizz "wzxx"++zxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zxx_ = mkSwizz "zxx"++xwxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwxx_ = mkSwizz "xwxx"++ywxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywxx_ = mkSwizz "ywxx"++zwxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwxx_ = mkSwizz "zwxx"++wwxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwxx_ = mkSwizz "wwxx"++wxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wxx_ = mkSwizz "wxx"++xx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2+xx_ = mkSwizz "xx"++xxyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xxyx_ = mkSwizz "xxyx"++yxyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yxyx_ = mkSwizz "yxyx"++zxyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxyx_ = mkSwizz "zxyx"++wxyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxyx_ = mkSwizz "wxyx"++xyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+xyx_ = mkSwizz "xyx"++xyyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xyyx_ = mkSwizz "xyyx"++yyyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yyyx_ = mkSwizz "yyyx"++zyyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyyx_ = mkSwizz "zyyx"++wyyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyyx_ = mkSwizz "wyyx"++yyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+yyx_ = mkSwizz "yyx"++xzyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzyx_ = mkSwizz "xzyx"++yzyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzyx_ = mkSwizz "yzyx"++zzyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzyx_ = mkSwizz "zzyx"++wzyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzyx_ = mkSwizz "wzyx"++zyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zyx_ = mkSwizz "zyx"++xwyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwyx_ = mkSwizz "xwyx"++ywyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywyx_ = mkSwizz "ywyx"++zwyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwyx_ = mkSwizz "zwyx"++wwyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwyx_ = mkSwizz "wwyx"++wyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wyx_ = mkSwizz "wyx"++yx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2+yx_ = mkSwizz "yx"++xxzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xxzx_ = mkSwizz "xxzx"++yxzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yxzx_ = mkSwizz "yxzx"++zxzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxzx_ = mkSwizz "zxzx"++wxzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxzx_ = mkSwizz "wxzx"++xzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+xzx_ = mkSwizz "xzx"++xyzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xyzx_ = mkSwizz "xyzx"++yyzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yyzx_ = mkSwizz "yyzx"++zyzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyzx_ = mkSwizz "zyzx"++wyzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyzx_ = mkSwizz "wyzx"++yzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+yzx_ = mkSwizz "yzx"++xzzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzzx_ = mkSwizz "xzzx"++yzzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzzx_ = mkSwizz "yzzx"++zzzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzzx_ = mkSwizz "zzzx"++wzzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzzx_ = mkSwizz "wzzx"++zzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zzx_ = mkSwizz "zzx"++xwzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwzx_ = mkSwizz "xwzx"++ywzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywzx_ = mkSwizz "ywzx"++zwzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwzx_ = mkSwizz "zwzx"++wwzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwzx_ = mkSwizz "wwzx"++wzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wzx_ = mkSwizz "wzx"++zx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2+zx_ = mkSwizz "zx"++xxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxwx_ = mkSwizz "xxwx"++yxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxwx_ = mkSwizz "yxwx"++zxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxwx_ = mkSwizz "zxwx"++wxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxwx_ = mkSwizz "wxwx"++xwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xwx_ = mkSwizz "xwx"++xywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xywx_ = mkSwizz "xywx"++yywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yywx_ = mkSwizz "yywx"++zywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zywx_ = mkSwizz "zywx"++wywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wywx_ = mkSwizz "wywx"++ywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+ywx_ = mkSwizz "ywx"++xzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzwx_ = mkSwizz "xzwx"++yzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzwx_ = mkSwizz "yzwx"++zzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzwx_ = mkSwizz "zzwx"++wzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzwx_ = mkSwizz "wzwx"++zwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zwx_ = mkSwizz "zwx"++xwwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwwx_ = mkSwizz "xwwx"++ywwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywwx_ = mkSwizz "ywwx"++zwwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwwx_ = mkSwizz "zwwx"++wwwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwwx_ = mkSwizz "wwwx"++wwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wwx_ = mkSwizz "wwx"++wx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+wx_ = mkSwizz "wx"++x_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 1+x_ = mkSwizz "x"++xxxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xxxy_ = mkSwizz "xxxy"++yxxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yxxy_ = mkSwizz "yxxy"++zxxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxxy_ = mkSwizz "zxxy"++wxxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxxy_ = mkSwizz "wxxy"++xxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+xxy_ = mkSwizz "xxy"++xyxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xyxy_ = mkSwizz "xyxy"++yyxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yyxy_ = mkSwizz "yyxy"++zyxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyxy_ = mkSwizz "zyxy"++wyxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyxy_ = mkSwizz "wyxy"++yxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+yxy_ = mkSwizz "yxy"++xzxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzxy_ = mkSwizz "xzxy"++yzxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzxy_ = mkSwizz "yzxy"++zzxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzxy_ = mkSwizz "zzxy"++wzxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzxy_ = mkSwizz "wzxy"++zxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zxy_ = mkSwizz "zxy"++xwxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwxy_ = mkSwizz "xwxy"++ywxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywxy_ = mkSwizz "ywxy"++zwxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwxy_ = mkSwizz "zwxy"++wwxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwxy_ = mkSwizz "wwxy"++wxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wxy_ = mkSwizz "wxy"++xy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2+xy_ = mkSwizz "xy"++xxyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xxyy_ = mkSwizz "xxyy"++yxyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yxyy_ = mkSwizz "yxyy"++zxyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxyy_ = mkSwizz "zxyy"++wxyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxyy_ = mkSwizz "wxyy"++xyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+xyy_ = mkSwizz "xyy"++xyyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+xyyy_ = mkSwizz "xyyy"++yyyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4+yyyy_ = mkSwizz "yyyy"++zyyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyyy_ = mkSwizz "zyyy"++wyyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyyy_ = mkSwizz "wyyy"++yyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3+yyy_ = mkSwizz "yyy"++xzyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzyy_ = mkSwizz "xzyy"++yzyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzyy_ = mkSwizz "yzyy"++zzyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzyy_ = mkSwizz "zzyy"++wzyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzyy_ = mkSwizz "wzyy"++zyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zyy_ = mkSwizz "zyy"++xwyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwyy_ = mkSwizz "xwyy"++ywyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywyy_ = mkSwizz "ywyy"++zwyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwyy_ = mkSwizz "zwyy"++wwyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwyy_ = mkSwizz "wwyy"++wyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wyy_ = mkSwizz "wyy"++yy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2+yy_ = mkSwizz "yy"++xxzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xxzy_ = mkSwizz "xxzy"++yxzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yxzy_ = mkSwizz "yxzy"++zxzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxzy_ = mkSwizz "zxzy"++wxzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxzy_ = mkSwizz "wxzy"++xzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+xzy_ = mkSwizz "xzy"++xyzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xyzy_ = mkSwizz "xyzy"++yyzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yyzy_ = mkSwizz "yyzy"++zyzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyzy_ = mkSwizz "zyzy"++wyzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyzy_ = mkSwizz "wyzy"++yzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+yzy_ = mkSwizz "yzy"++xzzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzzy_ = mkSwizz "xzzy"++yzzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzzy_ = mkSwizz "yzzy"++zzzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzzy_ = mkSwizz "zzzy"++wzzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzzy_ = mkSwizz "wzzy"++zzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zzy_ = mkSwizz "zzy"++xwzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwzy_ = mkSwizz "xwzy"++ywzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywzy_ = mkSwizz "ywzy"++zwzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwzy_ = mkSwizz "zwzy"++wwzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwzy_ = mkSwizz "wwzy"++wzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wzy_ = mkSwizz "wzy"++zy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2+zy_ = mkSwizz "zy"++xxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxwy_ = mkSwizz "xxwy"++yxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxwy_ = mkSwizz "yxwy"++zxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxwy_ = mkSwizz "zxwy"++wxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxwy_ = mkSwizz "wxwy"++xwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xwy_ = mkSwizz "xwy"++xywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xywy_ = mkSwizz "xywy"++yywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yywy_ = mkSwizz "yywy"++zywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zywy_ = mkSwizz "zywy"++wywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wywy_ = mkSwizz "wywy"++ywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+ywy_ = mkSwizz "ywy"++xzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzwy_ = mkSwizz "xzwy"++yzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzwy_ = mkSwizz "yzwy"++zzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzwy_ = mkSwizz "zzwy"++wzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzwy_ = mkSwizz "wzwy"++zwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zwy_ = mkSwizz "zwy"++xwwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwwy_ = mkSwizz "xwwy"++ywwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywwy_ = mkSwizz "ywwy"++zwwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwwy_ = mkSwizz "zwwy"++wwwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwwy_ = mkSwizz "wwwy"++wwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wwy_ = mkSwizz "wwy"++wy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+wy_ = mkSwizz "wy"++y_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 1+y_ = mkSwizz "y"++xxxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xxxz_ = mkSwizz "xxxz"++yxxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yxxz_ = mkSwizz "yxxz"++zxxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxxz_ = mkSwizz "zxxz"++wxxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxxz_ = mkSwizz "wxxz"++xxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+xxz_ = mkSwizz "xxz"++xyxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xyxz_ = mkSwizz "xyxz"++yyxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yyxz_ = mkSwizz "yyxz"++zyxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyxz_ = mkSwizz "zyxz"++wyxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyxz_ = mkSwizz "wyxz"++yxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+yxz_ = mkSwizz "yxz"++xzxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzxz_ = mkSwizz "xzxz"++yzxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzxz_ = mkSwizz "yzxz"++zzxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzxz_ = mkSwizz "zzxz"++wzxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzxz_ = mkSwizz "wzxz"++zxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zxz_ = mkSwizz "zxz"++xwxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwxz_ = mkSwizz "xwxz"++ywxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywxz_ = mkSwizz "ywxz"++zwxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwxz_ = mkSwizz "zwxz"++wwxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwxz_ = mkSwizz "wwxz"++wxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wxz_ = mkSwizz "wxz"++xz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2+xz_ = mkSwizz "xz"++xxyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xxyz_ = mkSwizz "xxyz"++yxyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yxyz_ = mkSwizz "yxyz"++zxyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxyz_ = mkSwizz "zxyz"++wxyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxyz_ = mkSwizz "wxyz"++xyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+xyz_ = mkSwizz "xyz"++xyyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xyyz_ = mkSwizz "xyyz"++yyyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yyyz_ = mkSwizz "yyyz"++zyyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyyz_ = mkSwizz "zyyz"++wyyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyyz_ = mkSwizz "wyyz"++yyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+yyz_ = mkSwizz "yyz"++xzyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzyz_ = mkSwizz "xzyz"++yzyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzyz_ = mkSwizz "yzyz"++zzyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzyz_ = mkSwizz "zzyz"++wzyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzyz_ = mkSwizz "wzyz"++zyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zyz_ = mkSwizz "zyz"++xwyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwyz_ = mkSwizz "xwyz"++ywyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywyz_ = mkSwizz "ywyz"++zwyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwyz_ = mkSwizz "zwyz"++wwyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwyz_ = mkSwizz "wwyz"++wyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wyz_ = mkSwizz "wyz"++yz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2+yz_ = mkSwizz "yz"++xxzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xxzz_ = mkSwizz "xxzz"++yxzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yxzz_ = mkSwizz "yxzz"++zxzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zxzz_ = mkSwizz "zxzz"++wxzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxzz_ = mkSwizz "wxzz"++xzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+xzz_ = mkSwizz "xzz"++xyzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xyzz_ = mkSwizz "xyzz"++yyzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yyzz_ = mkSwizz "yyzz"++zyzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zyzz_ = mkSwizz "zyzz"++wyzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyzz_ = mkSwizz "wyzz"++yzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+yzz_ = mkSwizz "yzz"++xzzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+xzzz_ = mkSwizz "xzzz"++yzzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+yzzz_ = mkSwizz "yzzz"++zzzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4+zzzz_ = mkSwizz "zzzz"++wzzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzzz_ = mkSwizz "wzzz"++zzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3+zzz_ = mkSwizz "zzz"++xwzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwzz_ = mkSwizz "xwzz"++ywzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywzz_ = mkSwizz "ywzz"++zwzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwzz_ = mkSwizz "zwzz"++wwzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwzz_ = mkSwizz "wwzz"++wzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wzz_ = mkSwizz "wzz"++zz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2+zz_ = mkSwizz "zz"++xxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxwz_ = mkSwizz "xxwz"++yxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxwz_ = mkSwizz "yxwz"++zxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxwz_ = mkSwizz "zxwz"++wxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxwz_ = mkSwizz "wxwz"++xwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xwz_ = mkSwizz "xwz"++xywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xywz_ = mkSwizz "xywz"++yywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yywz_ = mkSwizz "yywz"++zywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zywz_ = mkSwizz "zywz"++wywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wywz_ = mkSwizz "wywz"++ywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+ywz_ = mkSwizz "ywz"++xzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzwz_ = mkSwizz "xzwz"++yzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzwz_ = mkSwizz "yzwz"++zzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzwz_ = mkSwizz "zzwz"++wzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzwz_ = mkSwizz "wzwz"++zwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zwz_ = mkSwizz "zwz"++xwwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwwz_ = mkSwizz "xwwz"++ywwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywwz_ = mkSwizz "ywwz"++zwwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwwz_ = mkSwizz "zwwz"++wwwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwwz_ = mkSwizz "wwwz"++wwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wwz_ = mkSwizz "wwz"++wz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+wz_ = mkSwizz "wz"++z_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 1+z_ = mkSwizz "z"++xxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxxw_ = mkSwizz "xxxw"++yxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxxw_ = mkSwizz "yxxw"++zxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxxw_ = mkSwizz "zxxw"++wxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxxw_ = mkSwizz "wxxw"++xxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xxw_ = mkSwizz "xxw"++xyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xyxw_ = mkSwizz "xyxw"++yyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yyxw_ = mkSwizz "yyxw"++zyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zyxw_ = mkSwizz "zyxw"++wyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyxw_ = mkSwizz "wyxw"++yxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+yxw_ = mkSwizz "yxw"++xzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzxw_ = mkSwizz "xzxw"++yzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzxw_ = mkSwizz "yzxw"++zzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzxw_ = mkSwizz "zzxw"++wzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzxw_ = mkSwizz "wzxw"++zxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zxw_ = mkSwizz "zxw"++xwxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwxw_ = mkSwizz "xwxw"++ywxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywxw_ = mkSwizz "ywxw"++zwxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwxw_ = mkSwizz "zwxw"++wwxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwxw_ = mkSwizz "wwxw"++wxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wxw_ = mkSwizz "wxw"++xw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+xw_ = mkSwizz "xw"++xxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxyw_ = mkSwizz "xxyw"++yxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxyw_ = mkSwizz "yxyw"++zxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxyw_ = mkSwizz "zxyw"++wxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxyw_ = mkSwizz "wxyw"++xyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xyw_ = mkSwizz "xyw"++xyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xyyw_ = mkSwizz "xyyw"++yyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yyyw_ = mkSwizz "yyyw"++zyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zyyw_ = mkSwizz "zyyw"++wyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyyw_ = mkSwizz "wyyw"++yyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+yyw_ = mkSwizz "yyw"++xzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzyw_ = mkSwizz "xzyw"++yzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzyw_ = mkSwizz "yzyw"++zzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzyw_ = mkSwizz "zzyw"++wzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzyw_ = mkSwizz "wzyw"++zyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zyw_ = mkSwizz "zyw"++xwyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwyw_ = mkSwizz "xwyw"++ywyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywyw_ = mkSwizz "ywyw"++zwyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwyw_ = mkSwizz "zwyw"++wwyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwyw_ = mkSwizz "wwyw"++wyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wyw_ = mkSwizz "wyw"++yw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+yw_ = mkSwizz "yw"++xxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxzw_ = mkSwizz "xxzw"++yxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxzw_ = mkSwizz "yxzw"++zxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxzw_ = mkSwizz "zxzw"++wxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxzw_ = mkSwizz "wxzw"++xzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xzw_ = mkSwizz "xzw"++xyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xyzw_ = mkSwizz "xyzw"++yyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yyzw_ = mkSwizz "yyzw"++zyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zyzw_ = mkSwizz "zyzw"++wyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyzw_ = mkSwizz "wyzw"++yzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+yzw_ = mkSwizz "yzw"++xzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzzw_ = mkSwizz "xzzw"++yzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzzw_ = mkSwizz "yzzw"++zzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzzw_ = mkSwizz "zzzw"++wzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzzw_ = mkSwizz "wzzw"++zzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zzw_ = mkSwizz "zzw"++xwzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwzw_ = mkSwizz "xwzw"++ywzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywzw_ = mkSwizz "ywzw"++zwzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwzw_ = mkSwizz "zwzw"++wwzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwzw_ = mkSwizz "wwzw"++wzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+wzw_ = mkSwizz "wzw"++zw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+zw_ = mkSwizz "zw"++xxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xxww_ = mkSwizz "xxww"++yxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yxww_ = mkSwizz "yxww"++zxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zxww_ = mkSwizz "zxww"++wxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wxww_ = mkSwizz "wxww"++xww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+xww_ = mkSwizz "xww"++xyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xyww_ = mkSwizz "xyww"++yyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yyww_ = mkSwizz "yyww"++zyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zyww_ = mkSwizz "zyww"++wyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wyww_ = mkSwizz "wyww"++yww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+yww_ = mkSwizz "yww"++xzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xzww_ = mkSwizz "xzww"++yzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+yzww_ = mkSwizz "yzww"++zzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zzww_ = mkSwizz "zzww"++wzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wzww_ = mkSwizz "wzww"++zww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+zww_ = mkSwizz "zww"++xwww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+xwww_ = mkSwizz "xwww"++ywww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+ywww_ = mkSwizz "ywww"++zwww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+zwww_ = mkSwizz "zwww"++wwww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4+wwww_ = mkSwizz "wwww"++www_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3+www_ = mkSwizz "www"++ww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2+ww_ = mkSwizz "ww"++w_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 1+w_ = mkSwizz "w"++
− src/Hylogen/Vec.hs
@@ -1,1185 +0,0 @@-{-# LANGUAGE GADTs #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE InstanceSigs #-}---module Hylogen.Vec where--import GHC.TypeLits-import Data.VectorSpace--import Hylogen.Expr---data FloatVec (n :: Nat) = FloatVec--type Vec n = Expr (FloatVec n)-type Vec1 = Vec 1-type Vec2 = Vec 2-type Vec3 = Vec 3-type Vec4 = Vec 4--instance ToGLSLType (FloatVec 1) where-  toGLSLType _ = GLSLFloat-  tag = FloatVec-instance ToGLSLType (FloatVec 2) where-  toGLSLType _ = GLSLVec2-  tag = FloatVec-instance ToGLSLType (FloatVec 3) where-  toGLSLType _ = GLSLVec3-  tag = FloatVec-instance ToGLSLType (FloatVec 4) where-  toGLSLType _ = GLSLVec4-  tag = FloatVec----class (ToGLSLType (FloatVec n), KnownNat n) => Veccable n where-  copy :: Vec1 -> Vec n-  toList :: Vec n -> [Vec1]---instance Veccable 1 where-  copy = id-  toList v = [v]-instance Veccable 2 where-  copy v = op2pre' "vec2" v v -  toList v = [x_ v, y_ v]-instance Veccable 3 where-  copy v = op3pre' "vec3" v v v-  toList v = [x_ v, y_ v, z_ v]-instance Veccable 4 where-  copy v = op4pre' "vec4" v v v v-  toList v = [x_ v, y_ v, z_ v]----instance (Veccable n) => Num (Vec n) where-  (+) = op2' "+"-  (-) = op2' "-"-  (*) = op2' "*"-  abs = op1pre "abs"-  signum = op1pre "sign"-  negate = op1 "-"-  fromInteger x = copy . uniform . show $ (fromInteger x :: Float)---instance (Veccable n) => Fractional (Vec n) where-  (/) = op2' "/"-  fromRational x = copy . uniform . show $ (fromRational x :: Float)--instance (Veccable n) => Floating (Vec n) where-  -- pi = copy $ uniform "pi"-  pi = copy $ uniform "3.141592653589793238462643383"-  exp = op1pre "exp"-  log = op1pre "log"-  sqrt = op1pre "sqrt"-  (**) = op2pre' "pow"-  sin = op1pre "sin"-  cos = op1pre "cos"-  tan = op1pre "tan"-  asin = op1pre "asin"-  acos = op1pre "acos"-  atan = op1pre "atan"-  sinh x = (exp x - exp (negate x)) / 2-  cosh x = (exp x + exp (negate x))/2-  tanh x = sinh x / cosh x-  asinh x = log $ x + sqrt(x**2 + 1)-  acosh x = log $ x + sqrt(x**2 - 1)-  atanh x = 0.5 * log ((1 + x)/(1 - x))--instance Veccable n => AdditiveGroup (Vec n) where-  zeroV = 0-  (^+^) = (+)-  negateV = negate-  (^-^) = (-)--instance Veccable n => VectorSpace (Vec n) where-  type Scalar (Vec n) = Vec 1-  a *^ b = copy a * b--instance Veccable n => InnerSpace (Vec n) where-  a <.> b = Expr fv (Tree (Op2Pre, GLSLFloat, "dot") (fmap toMono [a, b]))-    where fv = FloatVec :: FloatVec 1---  ---vec2 :: (Vec1, Vec1) -> Vec2-vec2 (x, y) = op2pre' "vec2" x y---class ToVec3 tuple where vec3 :: tuple -> Vec3--instance (a ~ Vec m, b ~ Vec (3 - m)) => ToVec3 (a, b) where-  vec3 (x, y) = Expr fv (Tree (Op2Pre, toGLSLType fv, "vec3") [toMono x, toMono y])-      where fv = FloatVec :: FloatVec 3--instance (a ~ Vec1, b ~ Vec1, c ~ Vec1) => ToVec3 (a, b, c) where-  vec3 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec3") (fmap toMono [x, y, z]))-      where fv = FloatVec :: FloatVec 3---class ToVec4 tuple where vec4 :: tuple -> Vec4--instance (a ~ Vec m, b ~ Vec (4 - m)) => ToVec4 (a, b) where-  vec4 (x, y) = Expr fv (Tree (Op2Pre, toGLSLType fv, "vec4") [toMono x,toMono y])-      where fv = FloatVec :: FloatVec 4--instance {-#INCOHERENT#-} (b ~ Vec1, c ~ Vec1) => ToVec4 (Vec2, b, c) where-  vec4 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec4") [toMono x,toMono y,toMono z])-      where fv = FloatVec :: FloatVec 4--instance {-#INCOHERENT#-} (a ~ Vec1, c ~ Vec1) => ToVec4 (a, Vec2, c) where-  vec4 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec4") [toMono x,toMono y,toMono z])-      where fv = FloatVec :: FloatVec 4--instance {-#INCOHERENT#-} (a ~ Vec1, b ~ Vec1) => ToVec4 (a, b, Vec2) where-  vec4 (x, y, z) = Expr fv (Tree (Op3Pre, toGLSLType fv, "vec4") [toMono x,toMono y,toMono z])-      where fv = FloatVec :: FloatVec 4---instance (a ~ Vec1, b ~ Vec1, c ~ Vec1, d ~ Vec1) => ToVec4 (a, b, c, d) where-  vec4 (x, y, z, w) = Expr fv (Tree (Op4Pre, toGLSLType fv, "vec4") (fmap toMono [x, y, z, w]))-      where fv = FloatVec :: FloatVec 4----- Swizzling!-type (>=) x y = (x + 1 <=? y) ~ 'False--mkSwizz :: forall n m. (Veccable n, Veccable m) => String -> Vec n -> Vec m-mkSwizz str v = Expr fv (Tree (Access, toGLSLType fv, str) [toMono v])-  where-    fv = FloatVec :: FloatVec m--xxxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xxxx_ = mkSwizz "xxxx"--yxxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yxxx_ = mkSwizz "yxxx"--zxxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxxx_ = mkSwizz "zxxx"--wxxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxxx_ = mkSwizz "wxxx"--xxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-xxx_ = mkSwizz "xxx"--xyxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xyxx_ = mkSwizz "xyxx"--yyxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yyxx_ = mkSwizz "yyxx"--zyxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyxx_ = mkSwizz "zyxx"--wyxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyxx_ = mkSwizz "wyxx"--yxx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-yxx_ = mkSwizz "yxx"--xzxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzxx_ = mkSwizz "xzxx"--yzxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzxx_ = mkSwizz "yzxx"--zzxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzxx_ = mkSwizz "zzxx"--wzxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzxx_ = mkSwizz "wzxx"--zxx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zxx_ = mkSwizz "zxx"--xwxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwxx_ = mkSwizz "xwxx"--ywxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywxx_ = mkSwizz "ywxx"--zwxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwxx_ = mkSwizz "zwxx"--wwxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwxx_ = mkSwizz "wwxx"--wxx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wxx_ = mkSwizz "wxx"--xx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2-xx_ = mkSwizz "xx"--xxyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xxyx_ = mkSwizz "xxyx"--yxyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yxyx_ = mkSwizz "yxyx"--zxyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxyx_ = mkSwizz "zxyx"--wxyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxyx_ = mkSwizz "wxyx"--xyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-xyx_ = mkSwizz "xyx"--xyyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xyyx_ = mkSwizz "xyyx"--yyyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yyyx_ = mkSwizz "yyyx"--zyyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyyx_ = mkSwizz "zyyx"--wyyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyyx_ = mkSwizz "wyyx"--yyx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-yyx_ = mkSwizz "yyx"--xzyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzyx_ = mkSwizz "xzyx"--yzyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzyx_ = mkSwizz "yzyx"--zzyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzyx_ = mkSwizz "zzyx"--wzyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzyx_ = mkSwizz "wzyx"--zyx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zyx_ = mkSwizz "zyx"--xwyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwyx_ = mkSwizz "xwyx"--ywyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywyx_ = mkSwizz "ywyx"--zwyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwyx_ = mkSwizz "zwyx"--wwyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwyx_ = mkSwizz "wwyx"--wyx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wyx_ = mkSwizz "wyx"--yx_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2-yx_ = mkSwizz "yx"--xxzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xxzx_ = mkSwizz "xxzx"--yxzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yxzx_ = mkSwizz "yxzx"--zxzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxzx_ = mkSwizz "zxzx"--wxzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxzx_ = mkSwizz "wxzx"--xzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-xzx_ = mkSwizz "xzx"--xyzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xyzx_ = mkSwizz "xyzx"--yyzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yyzx_ = mkSwizz "yyzx"--zyzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyzx_ = mkSwizz "zyzx"--wyzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyzx_ = mkSwizz "wyzx"--yzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-yzx_ = mkSwizz "yzx"--xzzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzzx_ = mkSwizz "xzzx"--yzzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzzx_ = mkSwizz "yzzx"--zzzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzzx_ = mkSwizz "zzzx"--wzzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzzx_ = mkSwizz "wzzx"--zzx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zzx_ = mkSwizz "zzx"--xwzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwzx_ = mkSwizz "xwzx"--ywzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywzx_ = mkSwizz "ywzx"--zwzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwzx_ = mkSwizz "zwzx"--wwzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwzx_ = mkSwizz "wwzx"--wzx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wzx_ = mkSwizz "wzx"--zx_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2-zx_ = mkSwizz "zx"--xxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxwx_ = mkSwizz "xxwx"--yxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxwx_ = mkSwizz "yxwx"--zxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxwx_ = mkSwizz "zxwx"--wxwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxwx_ = mkSwizz "wxwx"--xwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xwx_ = mkSwizz "xwx"--xywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xywx_ = mkSwizz "xywx"--yywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yywx_ = mkSwizz "yywx"--zywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zywx_ = mkSwizz "zywx"--wywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wywx_ = mkSwizz "wywx"--ywx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-ywx_ = mkSwizz "ywx"--xzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzwx_ = mkSwizz "xzwx"--yzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzwx_ = mkSwizz "yzwx"--zzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzwx_ = mkSwizz "zzwx"--wzwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzwx_ = mkSwizz "wzwx"--zwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zwx_ = mkSwizz "zwx"--xwwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwwx_ = mkSwizz "xwwx"--ywwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywwx_ = mkSwizz "ywwx"--zwwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwwx_ = mkSwizz "zwwx"--wwwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwwx_ = mkSwizz "wwwx"--wwx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wwx_ = mkSwizz "wwx"--wx_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-wx_ = mkSwizz "wx"--x_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 1-x_ = mkSwizz "x"--xxxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xxxy_ = mkSwizz "xxxy"--yxxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yxxy_ = mkSwizz "yxxy"--zxxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxxy_ = mkSwizz "zxxy"--wxxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxxy_ = mkSwizz "wxxy"--xxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-xxy_ = mkSwizz "xxy"--xyxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xyxy_ = mkSwizz "xyxy"--yyxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yyxy_ = mkSwizz "yyxy"--zyxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyxy_ = mkSwizz "zyxy"--wyxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyxy_ = mkSwizz "wyxy"--yxy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-yxy_ = mkSwizz "yxy"--xzxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzxy_ = mkSwizz "xzxy"--yzxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzxy_ = mkSwizz "yzxy"--zzxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzxy_ = mkSwizz "zzxy"--wzxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzxy_ = mkSwizz "wzxy"--zxy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zxy_ = mkSwizz "zxy"--xwxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwxy_ = mkSwizz "xwxy"--ywxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywxy_ = mkSwizz "ywxy"--zwxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwxy_ = mkSwizz "zwxy"--wwxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwxy_ = mkSwizz "wwxy"--wxy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wxy_ = mkSwizz "wxy"--xy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2-xy_ = mkSwizz "xy"--xxyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xxyy_ = mkSwizz "xxyy"--yxyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yxyy_ = mkSwizz "yxyy"--zxyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxyy_ = mkSwizz "zxyy"--wxyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxyy_ = mkSwizz "wxyy"--xyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-xyy_ = mkSwizz "xyy"--xyyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-xyyy_ = mkSwizz "xyyy"--yyyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 4-yyyy_ = mkSwizz "yyyy"--zyyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyyy_ = mkSwizz "zyyy"--wyyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyyy_ = mkSwizz "wyyy"--yyy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 3-yyy_ = mkSwizz "yyy"--xzyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzyy_ = mkSwizz "xzyy"--yzyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzyy_ = mkSwizz "yzyy"--zzyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzyy_ = mkSwizz "zzyy"--wzyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzyy_ = mkSwizz "wzyy"--zyy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zyy_ = mkSwizz "zyy"--xwyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwyy_ = mkSwizz "xwyy"--ywyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywyy_ = mkSwizz "ywyy"--zwyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwyy_ = mkSwizz "zwyy"--wwyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwyy_ = mkSwizz "wwyy"--wyy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wyy_ = mkSwizz "wyy"--yy_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 2-yy_ = mkSwizz "yy"--xxzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xxzy_ = mkSwizz "xxzy"--yxzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yxzy_ = mkSwizz "yxzy"--zxzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxzy_ = mkSwizz "zxzy"--wxzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxzy_ = mkSwizz "wxzy"--xzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-xzy_ = mkSwizz "xzy"--xyzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xyzy_ = mkSwizz "xyzy"--yyzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yyzy_ = mkSwizz "yyzy"--zyzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyzy_ = mkSwizz "zyzy"--wyzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyzy_ = mkSwizz "wyzy"--yzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-yzy_ = mkSwizz "yzy"--xzzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzzy_ = mkSwizz "xzzy"--yzzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzzy_ = mkSwizz "yzzy"--zzzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzzy_ = mkSwizz "zzzy"--wzzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzzy_ = mkSwizz "wzzy"--zzy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zzy_ = mkSwizz "zzy"--xwzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwzy_ = mkSwizz "xwzy"--ywzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywzy_ = mkSwizz "ywzy"--zwzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwzy_ = mkSwizz "zwzy"--wwzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwzy_ = mkSwizz "wwzy"--wzy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wzy_ = mkSwizz "wzy"--zy_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2-zy_ = mkSwizz "zy"--xxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxwy_ = mkSwizz "xxwy"--yxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxwy_ = mkSwizz "yxwy"--zxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxwy_ = mkSwizz "zxwy"--wxwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxwy_ = mkSwizz "wxwy"--xwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xwy_ = mkSwizz "xwy"--xywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xywy_ = mkSwizz "xywy"--yywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yywy_ = mkSwizz "yywy"--zywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zywy_ = mkSwizz "zywy"--wywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wywy_ = mkSwizz "wywy"--ywy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-ywy_ = mkSwizz "ywy"--xzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzwy_ = mkSwizz "xzwy"--yzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzwy_ = mkSwizz "yzwy"--zzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzwy_ = mkSwizz "zzwy"--wzwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzwy_ = mkSwizz "wzwy"--zwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zwy_ = mkSwizz "zwy"--xwwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwwy_ = mkSwizz "xwwy"--ywwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywwy_ = mkSwizz "ywwy"--zwwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwwy_ = mkSwizz "zwwy"--wwwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwwy_ = mkSwizz "wwwy"--wwy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wwy_ = mkSwizz "wwy"--wy_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-wy_ = mkSwizz "wy"--y_ :: forall n. (Veccable n, n >= 2) => Vec n -> Vec 1-y_ = mkSwizz "y"--xxxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xxxz_ = mkSwizz "xxxz"--yxxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yxxz_ = mkSwizz "yxxz"--zxxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxxz_ = mkSwizz "zxxz"--wxxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxxz_ = mkSwizz "wxxz"--xxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-xxz_ = mkSwizz "xxz"--xyxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xyxz_ = mkSwizz "xyxz"--yyxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yyxz_ = mkSwizz "yyxz"--zyxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyxz_ = mkSwizz "zyxz"--wyxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyxz_ = mkSwizz "wyxz"--yxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-yxz_ = mkSwizz "yxz"--xzxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzxz_ = mkSwizz "xzxz"--yzxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzxz_ = mkSwizz "yzxz"--zzxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzxz_ = mkSwizz "zzxz"--wzxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzxz_ = mkSwizz "wzxz"--zxz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zxz_ = mkSwizz "zxz"--xwxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwxz_ = mkSwizz "xwxz"--ywxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywxz_ = mkSwizz "ywxz"--zwxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwxz_ = mkSwizz "zwxz"--wwxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwxz_ = mkSwizz "wwxz"--wxz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wxz_ = mkSwizz "wxz"--xz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2-xz_ = mkSwizz "xz"--xxyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xxyz_ = mkSwizz "xxyz"--yxyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yxyz_ = mkSwizz "yxyz"--zxyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxyz_ = mkSwizz "zxyz"--wxyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxyz_ = mkSwizz "wxyz"--xyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-xyz_ = mkSwizz "xyz"--xyyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xyyz_ = mkSwizz "xyyz"--yyyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yyyz_ = mkSwizz "yyyz"--zyyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyyz_ = mkSwizz "zyyz"--wyyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyyz_ = mkSwizz "wyyz"--yyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-yyz_ = mkSwizz "yyz"--xzyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzyz_ = mkSwizz "xzyz"--yzyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzyz_ = mkSwizz "yzyz"--zzyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzyz_ = mkSwizz "zzyz"--wzyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzyz_ = mkSwizz "wzyz"--zyz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zyz_ = mkSwizz "zyz"--xwyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwyz_ = mkSwizz "xwyz"--ywyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywyz_ = mkSwizz "ywyz"--zwyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwyz_ = mkSwizz "zwyz"--wwyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwyz_ = mkSwizz "wwyz"--wyz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wyz_ = mkSwizz "wyz"--yz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2-yz_ = mkSwizz "yz"--xxzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xxzz_ = mkSwizz "xxzz"--yxzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yxzz_ = mkSwizz "yxzz"--zxzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zxzz_ = mkSwizz "zxzz"--wxzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxzz_ = mkSwizz "wxzz"--xzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-xzz_ = mkSwizz "xzz"--xyzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xyzz_ = mkSwizz "xyzz"--yyzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yyzz_ = mkSwizz "yyzz"--zyzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zyzz_ = mkSwizz "zyzz"--wyzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyzz_ = mkSwizz "wyzz"--yzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-yzz_ = mkSwizz "yzz"--xzzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-xzzz_ = mkSwizz "xzzz"--yzzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-yzzz_ = mkSwizz "yzzz"--zzzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 4-zzzz_ = mkSwizz "zzzz"--wzzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzzz_ = mkSwizz "wzzz"--zzz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 3-zzz_ = mkSwizz "zzz"--xwzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwzz_ = mkSwizz "xwzz"--ywzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywzz_ = mkSwizz "ywzz"--zwzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwzz_ = mkSwizz "zwzz"--wwzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwzz_ = mkSwizz "wwzz"--wzz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wzz_ = mkSwizz "wzz"--zz_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 2-zz_ = mkSwizz "zz"--xxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxwz_ = mkSwizz "xxwz"--yxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxwz_ = mkSwizz "yxwz"--zxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxwz_ = mkSwizz "zxwz"--wxwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxwz_ = mkSwizz "wxwz"--xwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xwz_ = mkSwizz "xwz"--xywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xywz_ = mkSwizz "xywz"--yywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yywz_ = mkSwizz "yywz"--zywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zywz_ = mkSwizz "zywz"--wywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wywz_ = mkSwizz "wywz"--ywz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-ywz_ = mkSwizz "ywz"--xzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzwz_ = mkSwizz "xzwz"--yzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzwz_ = mkSwizz "yzwz"--zzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzwz_ = mkSwizz "zzwz"--wzwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzwz_ = mkSwizz "wzwz"--zwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zwz_ = mkSwizz "zwz"--xwwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwwz_ = mkSwizz "xwwz"--ywwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywwz_ = mkSwizz "ywwz"--zwwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwwz_ = mkSwizz "zwwz"--wwwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwwz_ = mkSwizz "wwwz"--wwz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wwz_ = mkSwizz "wwz"--wz_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-wz_ = mkSwizz "wz"--z_ :: forall n. (Veccable n, n >= 3) => Vec n -> Vec 1-z_ = mkSwizz "z"--xxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxxw_ = mkSwizz "xxxw"--yxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxxw_ = mkSwizz "yxxw"--zxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxxw_ = mkSwizz "zxxw"--wxxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxxw_ = mkSwizz "wxxw"--xxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xxw_ = mkSwizz "xxw"--xyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xyxw_ = mkSwizz "xyxw"--yyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yyxw_ = mkSwizz "yyxw"--zyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zyxw_ = mkSwizz "zyxw"--wyxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyxw_ = mkSwizz "wyxw"--yxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-yxw_ = mkSwizz "yxw"--xzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzxw_ = mkSwizz "xzxw"--yzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzxw_ = mkSwizz "yzxw"--zzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzxw_ = mkSwizz "zzxw"--wzxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzxw_ = mkSwizz "wzxw"--zxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zxw_ = mkSwizz "zxw"--xwxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwxw_ = mkSwizz "xwxw"--ywxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywxw_ = mkSwizz "ywxw"--zwxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwxw_ = mkSwizz "zwxw"--wwxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwxw_ = mkSwizz "wwxw"--wxw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wxw_ = mkSwizz "wxw"--xw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-xw_ = mkSwizz "xw"--xxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxyw_ = mkSwizz "xxyw"--yxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxyw_ = mkSwizz "yxyw"--zxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxyw_ = mkSwizz "zxyw"--wxyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxyw_ = mkSwizz "wxyw"--xyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xyw_ = mkSwizz "xyw"--xyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xyyw_ = mkSwizz "xyyw"--yyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yyyw_ = mkSwizz "yyyw"--zyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zyyw_ = mkSwizz "zyyw"--wyyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyyw_ = mkSwizz "wyyw"--yyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-yyw_ = mkSwizz "yyw"--xzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzyw_ = mkSwizz "xzyw"--yzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzyw_ = mkSwizz "yzyw"--zzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzyw_ = mkSwizz "zzyw"--wzyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzyw_ = mkSwizz "wzyw"--zyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zyw_ = mkSwizz "zyw"--xwyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwyw_ = mkSwizz "xwyw"--ywyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywyw_ = mkSwizz "ywyw"--zwyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwyw_ = mkSwizz "zwyw"--wwyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwyw_ = mkSwizz "wwyw"--wyw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wyw_ = mkSwizz "wyw"--yw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-yw_ = mkSwizz "yw"--xxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxzw_ = mkSwizz "xxzw"--yxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxzw_ = mkSwizz "yxzw"--zxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxzw_ = mkSwizz "zxzw"--wxzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxzw_ = mkSwizz "wxzw"--xzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xzw_ = mkSwizz "xzw"--xyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xyzw_ = mkSwizz "xyzw"--yyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yyzw_ = mkSwizz "yyzw"--zyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zyzw_ = mkSwizz "zyzw"--wyzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyzw_ = mkSwizz "wyzw"--yzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-yzw_ = mkSwizz "yzw"--xzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzzw_ = mkSwizz "xzzw"--yzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzzw_ = mkSwizz "yzzw"--zzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzzw_ = mkSwizz "zzzw"--wzzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzzw_ = mkSwizz "wzzw"--zzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zzw_ = mkSwizz "zzw"--xwzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwzw_ = mkSwizz "xwzw"--ywzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywzw_ = mkSwizz "ywzw"--zwzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwzw_ = mkSwizz "zwzw"--wwzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwzw_ = mkSwizz "wwzw"--wzw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-wzw_ = mkSwizz "wzw"--zw_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-zw_ = mkSwizz "zw"--xxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xxww_ = mkSwizz "xxww"--yxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yxww_ = mkSwizz "yxww"--zxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zxww_ = mkSwizz "zxww"--wxww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wxww_ = mkSwizz "wxww"--xww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-xww_ = mkSwizz "xww"--xyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xyww_ = mkSwizz "xyww"--yyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yyww_ = mkSwizz "yyww"--zyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zyww_ = mkSwizz "zyww"--wyww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wyww_ = mkSwizz "wyww"--yww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-yww_ = mkSwizz "yww"--xzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xzww_ = mkSwizz "xzww"--yzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-yzww_ = mkSwizz "yzww"--zzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zzww_ = mkSwizz "zzww"--wzww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wzww_ = mkSwizz "wzww"--zww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-zww_ = mkSwizz "zww"--xwww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-xwww_ = mkSwizz "xwww"--ywww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-ywww_ = mkSwizz "ywww"--zwww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-zwww_ = mkSwizz "zwww"--wwww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 4-wwww_ = mkSwizz "wwww"--www_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 3-www_ = mkSwizz "www"--ww_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 2-ww_ = mkSwizz "ww"--w_ :: forall n. (Veccable n, n >= 4) => Vec n -> Vec 1-w_ = mkSwizz "w"--
src/Hylogen/WithHylide.hs view
@@ -12,6 +12,7 @@ import           Data.Function import           Data.VectorSpace +-- | Analog of @<$>@, but for @&@ infixl 5 <&> (<&>) :: (Functor f) => f a -> (a -> b) -> f b (<&>) = flip fmap
src/Hylogen/WithHylide/Core.hs view
@@ -31,27 +31,43 @@ osc8 = uniform "osc8"  --- TODO: flip these definitions! Normalized means ??+-- | Pixel coordinates+--+-- (0, 0) is the lower left corner+--+-- (1, 1) is the upper right corner uv :: Vec2 uv = uniform "uv()" +-- | Pixel coordinates+--+-- (0, 0) is the center of the screen+--+-- (1, 1) is the upper right corner uvN :: Vec2 uvN = uniform "uvN" +-- | Time in milliseconds since start of Hylide time :: Vec1 time = uniform "time"  +-- | Resolution of the screen resolution :: Vec2 resolution = uniform "resolution" +-- | Mouse position mouse :: Vec2 mouse = uniform "mouse"  +-- | Intensity of audio input, split into 4 bands+--+-- low, low-mid, mid, high audio :: Vec4 audio = uniform "audio" +-- | The last rendered frame backBuffer :: Texture backBuffer = uniform "backBuffer" @@ -59,7 +75,9 @@ channel1 = uniform "channel1"  --- | No sharing+-- | Writes GLSL+--+-- No sharing toGLSL' :: Vec4 -> String toGLSL' v = unlines [ "void main() {"                     , "    gl_FragColor = " <> show v <> ";"@@ -67,6 +85,8 @@                     ]  --- | sharing via Data.reify+-- | Writes GLSL+--+-- Sharing via Data.reify toGLSL :: Vec4 -> String toGLSL = show . toProgram . toMono
src/Hylogen/WithHylide/Util.hs view
@@ -2,15 +2,39 @@  import Hylogen --- Colors black :: Vec3 black = vec3 (0, 0, 0)  white :: Vec3 white = vec3 (1, 1, 1) +-- | Given an alpha value, sets it for the alpha channel for a given color+--+-- @+-- setAlpha alpha color -- == n newColor+-- @ setAlpha :: Vec1 -> Vec4 -> Vec4 setAlpha alpha v = vec4 (xyz_ v, alpha)  -- TODO: hsl ++-- | Linear to Exponential Map+--+-- @+-- linexp (a, b, c, d) a           -- == c+-- linexp (a, b, c, d) b           -- == d+-- linexp (a, b, c, d) ((a + b)\/2) -- == c * sqrt(d/c)+-- @+linexp :: (Floating a) => (a, a, a, a) -> a -> a+linexp (a, b, c, d) x = c * ((d / c) ** ((x - a) / (b - a)))++-- | Linear to Linear map+--+-- @+-- linexp (a, b, c, d) a           -- == c+-- linexp (a, b, c, d) b           -- == d+-- linexp (a, b, c, d) ((a + b)\/2) -- == ((c + d)/2)+-- @+linlin :: (Floating a) => (a, a, a, a) -> a -> a+linlin (a, b, c, d) x = c + (d - c) * ((x - a) / (b - a))