{-# LANGUAGE TypeFamilies, FlexibleContexts #-} module Graphics.GPipe.Internal.Orphans where import Data.Boolean import Linear.V0 import Linear.V1 import Linear.V2 import Linear.V3 import Linear.V4 import Linear.Plucker (Plucker(..)) import Linear.Quaternion (Quaternion(..)) import Linear.Affine (Point(..)) type instance BooleanOf (V0 a) = BooleanOf a type instance BooleanOf (V1 a) = BooleanOf a type instance BooleanOf (V2 a) = BooleanOf a type instance BooleanOf (V3 a) = BooleanOf a type instance BooleanOf (V4 a) = BooleanOf a type instance BooleanOf (Plucker a) = BooleanOf a type instance BooleanOf (Quaternion a) = BooleanOf a type instance BooleanOf (Point f a) = BooleanOf (f a) instance EqB a => EqB (V0 a) where V0 a V0 ==* :: V0 a -> V0 a -> bool ==* V0 a V0 = bool forall b. Boolean b => b true V0 a V0 /=* :: V0 a -> V0 a -> bool /=* V0 a V0 = bool forall b. Boolean b => b false instance EqB a => EqB (V1 a) where V1 a a ==* :: V1 a -> V1 a -> bool ==* V1 a x = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a x V1 a a /=* :: V1 a -> V1 a -> bool /=* V1 a x = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a x instance EqB a => EqB (V2 a) where V2 a a a b ==* :: V2 a -> V2 a -> bool ==* V2 a x a y = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a y V2 a a a b /=* :: V2 a -> V2 a -> bool /=* V2 a x a y = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a y instance EqB a => EqB (V3 a) where V3 a a a b a c ==* :: V3 a -> V3 a -> bool ==* V3 a x a y a z = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a y bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a c a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a z V3 a a a b a c /=* :: V3 a -> V3 a -> bool /=* V3 a x a y a z = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a y bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a c a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a z instance EqB a => EqB (V4 a) where V4 a a a b a c a d ==* :: V4 a -> V4 a -> bool ==* V4 a x a y a z a w = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a y bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a c a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a z bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a d a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a w V4 a a a b a c a d /=* :: V4 a -> V4 a -> bool /=* V4 a x a y a z a w = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a y bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a c a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a z bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a d a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a w instance EqB a => EqB (Quaternion a) where Quaternion a a V3 a v ==* :: Quaternion a -> Quaternion a -> bool ==* Quaternion a b V3 a u = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a b bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* V3 a v V3 a -> V3 a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* V3 a u Quaternion a a V3 a v /=* :: Quaternion a -> Quaternion a -> bool /=* Quaternion a b V3 a u = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a b bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* V3 a v V3 a -> V3 a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* V3 a u instance EqB a => EqB (Plucker a) where Plucker a a a b a c a d a e a f ==* :: Plucker a -> Plucker a -> bool ==* Plucker a x a y a z a w a u a v = a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a y bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a c a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a z bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a d a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a w bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a e a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a u bool -> bool -> bool forall b. Boolean b => b -> b -> b &&* a f a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* a v Plucker a a a b a c a d a e a f /=* :: Plucker a -> Plucker a -> bool /=* Plucker a x a y a z a w a u a v= a a a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a x bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a b a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a y bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a c a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a z bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a d a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a w bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a e a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a u bool -> bool -> bool forall b. Boolean b => b -> b -> b ||* a f a -> a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* a v instance EqB (f a) => EqB (Point f a) where P f a a ==* :: Point f a -> Point f a -> bool ==* P f a x = f a a f a -> f a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool ==* f a x P f a a /=* :: Point f a -> Point f a -> bool /=* P f a x = f a a f a -> f a -> bool forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool /=* f a x instance IfB a => IfB (V0 a) where ifB :: bool -> V0 a -> V0 a -> V0 a ifB bool q V0 a _ V0 a _ = V0 a forall a. V0 a V0 instance IfB a => IfB (V1 a) where ifB :: bool -> V1 a -> V1 a -> V1 a ifB bool q (V1 a a) (V1 a x) = a -> V1 a forall a. a -> V1 a V1 (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a a a x) instance IfB a => IfB (V2 a) where ifB :: bool -> V2 a -> V2 a -> V2 a ifB bool q (V2 a a a b) (V2 a x a y) = a -> a -> V2 a forall a. a -> a -> V2 a V2 (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a a a x) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a b a y) instance IfB a => IfB (V3 a) where ifB :: bool -> V3 a -> V3 a -> V3 a ifB bool q (V3 a a a b a c) (V3 a x a y a z) = a -> a -> a -> V3 a forall a. a -> a -> a -> V3 a V3 (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a a a x) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a b a y) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a c a z) instance IfB a => IfB (V4 a) where ifB :: bool -> V4 a -> V4 a -> V4 a ifB bool q (V4 a a a b a c a d) (V4 a x a y a z a w) = a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a a a x) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a b a y) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a c a z) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a d a w) instance IfB a => IfB (Quaternion a) where ifB :: bool -> Quaternion a -> Quaternion a -> Quaternion a ifB bool q (Quaternion a a V3 a v) (Quaternion a b V3 a u) = a -> V3 a -> Quaternion a forall a. a -> V3 a -> Quaternion a Quaternion (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a a a b) (bool -> V3 a -> V3 a -> V3 a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q V3 a v V3 a u) instance IfB a => IfB (Plucker a) where ifB :: bool -> Plucker a -> Plucker a -> Plucker a ifB bool q (Plucker a a a b a c a d a e a f) (Plucker a x a y a z a w a u a v) = a -> a -> a -> a -> a -> a -> Plucker a forall a. a -> a -> a -> a -> a -> a -> Plucker a Plucker (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a a a x) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a b a y) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a c a z) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a d a w) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a e a u) (bool -> a -> a -> a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q a f a v) instance IfB (f a) => IfB (Point f a) where ifB :: bool -> Point f a -> Point f a -> Point f a ifB bool q (P f a a) (P f a x) = f a -> Point f a forall (f :: * -> *) a. f a -> Point f a P (bool -> f a -> f a -> f a forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a ifB bool q f a a f a x)