{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Diagrams.Coordinates.Polar
(
Polar (..)
, mkPolar, polar, unpolar, polarIso, polarV2
, interpPolar
, Radial (..), Circle (..)
, HasX (..), HasY (..), HasR (..)
, er, eθ, etheta,
) where
import Control.Applicative
import qualified Data.Foldable as F
import Control.Lens
import Control.Monad.Fix
import Control.Monad.Zip
import Data.Distributive
import Data.Functor.Rep
import Data.Typeable
import GHC.Generics (Generic1)
import Diagrams.Angle
import Diagrams.TwoD.Types
import Linear.Affine
import Linear.Metric
import Linear.V3
import Linear.Vector
import Diagrams.Coordinates.Isomorphic
import Prelude
newtype Polar a = Polar (V2 a)
deriving (Applicative Polar
Applicative Polar =>
(forall a b. Polar a -> (a -> Polar b) -> Polar b)
-> (forall a b. Polar a -> Polar b -> Polar b)
-> (forall a. a -> Polar a)
-> Monad Polar
forall a. a -> Polar a
forall a b. Polar a -> Polar b -> Polar b
forall a b. Polar a -> (a -> Polar b) -> Polar b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall a b. Polar a -> (a -> Polar b) -> Polar b
>>= :: forall a b. Polar a -> (a -> Polar b) -> Polar b
$c>> :: forall a b. Polar a -> Polar b -> Polar b
>> :: forall a b. Polar a -> Polar b -> Polar b
$creturn :: forall a. a -> Polar a
return :: forall a. a -> Polar a
Monad, (forall a b. (a -> b) -> Polar a -> Polar b)
-> (forall a b. a -> Polar b -> Polar a) -> Functor Polar
forall a b. a -> Polar b -> Polar a
forall a b. (a -> b) -> Polar a -> Polar b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Polar a -> Polar b
fmap :: forall a b. (a -> b) -> Polar a -> Polar b
$c<$ :: forall a b. a -> Polar b -> Polar a
<$ :: forall a b. a -> Polar b -> Polar a
Functor, Typeable, Monad Polar
Monad Polar =>
(forall a. (a -> Polar a) -> Polar a) -> MonadFix Polar
forall a. (a -> Polar a) -> Polar a
forall (m :: * -> *).
Monad m =>
(forall a. (a -> m a) -> m a) -> MonadFix m
$cmfix :: forall a. (a -> Polar a) -> Polar a
mfix :: forall a. (a -> Polar a) -> Polar a
MonadFix, Functor Polar
Functor Polar =>
(forall a. a -> Polar a)
-> (forall a b. Polar (a -> b) -> Polar a -> Polar b)
-> (forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c)
-> (forall a b. Polar a -> Polar b -> Polar b)
-> (forall a b. Polar a -> Polar b -> Polar a)
-> Applicative Polar
forall a. a -> Polar a
forall a b. Polar a -> Polar b -> Polar a
forall a b. Polar a -> Polar b -> Polar b
forall a b. Polar (a -> b) -> Polar a -> Polar b
forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
$cpure :: forall a. a -> Polar a
pure :: forall a. a -> Polar a
$c<*> :: forall a b. Polar (a -> b) -> Polar a -> Polar b
<*> :: forall a b. Polar (a -> b) -> Polar a -> Polar b
$cliftA2 :: forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c
liftA2 :: forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c
$c*> :: forall a b. Polar a -> Polar b -> Polar b
*> :: forall a b. Polar a -> Polar b -> Polar b
$c<* :: forall a b. Polar a -> Polar b -> Polar a
<* :: forall a b. Polar a -> Polar b -> Polar a
Applicative, Functor Polar
Foldable Polar
(Functor Polar, Foldable Polar) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Polar a -> f (Polar b))
-> (forall (f :: * -> *) a.
Applicative f =>
Polar (f a) -> f (Polar a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Polar a -> m (Polar b))
-> (forall (m :: * -> *) a. Monad m => Polar (m a) -> m (Polar a))
-> Traversable Polar
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => Polar (m a) -> m (Polar a)
forall (f :: * -> *) a. Applicative f => Polar (f a) -> f (Polar a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Polar a -> m (Polar b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Polar a -> f (Polar b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Polar a -> f (Polar b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Polar a -> f (Polar b)
$csequenceA :: forall (f :: * -> *) a. Applicative f => Polar (f a) -> f (Polar a)
sequenceA :: forall (f :: * -> *) a. Applicative f => Polar (f a) -> f (Polar a)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Polar a -> m (Polar b)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Polar a -> m (Polar b)
$csequence :: forall (m :: * -> *) a. Monad m => Polar (m a) -> m (Polar a)
sequence :: forall (m :: * -> *) a. Monad m => Polar (m a) -> m (Polar a)
Traversable,
(forall a. Polar a -> Rep1 Polar a)
-> (forall a. Rep1 Polar a -> Polar a) -> Generic1 Polar
forall a. Rep1 Polar a -> Polar a
forall a. Polar a -> Rep1 Polar a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cfrom1 :: forall a. Polar a -> Rep1 Polar a
from1 :: forall a. Polar a -> Rep1 Polar a
$cto1 :: forall a. Rep1 Polar a -> Polar a
to1 :: forall a. Rep1 Polar a -> Polar a
Generic1, Monad Polar
Monad Polar =>
(forall a b. Polar a -> Polar b -> Polar (a, b))
-> (forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c)
-> (forall a b. Polar (a, b) -> (Polar a, Polar b))
-> MonadZip Polar
forall a b. Polar a -> Polar b -> Polar (a, b)
forall a b. Polar (a, b) -> (Polar a, Polar b)
forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c
forall (m :: * -> *).
Monad m =>
(forall a b. m a -> m b -> m (a, b))
-> (forall a b c. (a -> b -> c) -> m a -> m b -> m c)
-> (forall a b. m (a, b) -> (m a, m b))
-> MonadZip m
$cmzip :: forall a b. Polar a -> Polar b -> Polar (a, b)
mzip :: forall a b. Polar a -> Polar b -> Polar (a, b)
$cmzipWith :: forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c
mzipWith :: forall a b c. (a -> b -> c) -> Polar a -> Polar b -> Polar c
$cmunzip :: forall a b. Polar (a, b) -> (Polar a, Polar b)
munzip :: forall a b. Polar (a, b) -> (Polar a, Polar b)
MonadZip, (forall m. Monoid m => Polar m -> m)
-> (forall m a. Monoid m => (a -> m) -> Polar a -> m)
-> (forall m a. Monoid m => (a -> m) -> Polar a -> m)
-> (forall a b. (a -> b -> b) -> b -> Polar a -> b)
-> (forall a b. (a -> b -> b) -> b -> Polar a -> b)
-> (forall b a. (b -> a -> b) -> b -> Polar a -> b)
-> (forall b a. (b -> a -> b) -> b -> Polar a -> b)
-> (forall a. (a -> a -> a) -> Polar a -> a)
-> (forall a. (a -> a -> a) -> Polar a -> a)
-> (forall a. Polar a -> [a])
-> (forall a. Polar a -> Bool)
-> (forall a. Polar a -> Int)
-> (forall a. Eq a => a -> Polar a -> Bool)
-> (forall a. Ord a => Polar a -> a)
-> (forall a. Ord a => Polar a -> a)
-> (forall a. Num a => Polar a -> a)
-> (forall a. Num a => Polar a -> a)
-> Foldable Polar
forall a. Eq a => a -> Polar a -> Bool
forall a. Num a => Polar a -> a
forall a. Ord a => Polar a -> a
forall m. Monoid m => Polar m -> m
forall a. Polar a -> Bool
forall a. Polar a -> Int
forall a. Polar a -> [a]
forall a. (a -> a -> a) -> Polar a -> a
forall m a. Monoid m => (a -> m) -> Polar a -> m
forall b a. (b -> a -> b) -> b -> Polar a -> b
forall a b. (a -> b -> b) -> b -> Polar a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => Polar m -> m
fold :: forall m. Monoid m => Polar m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Polar a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Polar a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Polar a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> Polar a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> Polar a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Polar a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Polar a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Polar a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Polar a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Polar a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Polar a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> Polar a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> Polar a -> a
foldr1 :: forall a. (a -> a -> a) -> Polar a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Polar a -> a
foldl1 :: forall a. (a -> a -> a) -> Polar a -> a
$ctoList :: forall a. Polar a -> [a]
toList :: forall a. Polar a -> [a]
$cnull :: forall a. Polar a -> Bool
null :: forall a. Polar a -> Bool
$clength :: forall a. Polar a -> Int
length :: forall a. Polar a -> Int
$celem :: forall a. Eq a => a -> Polar a -> Bool
elem :: forall a. Eq a => a -> Polar a -> Bool
$cmaximum :: forall a. Ord a => Polar a -> a
maximum :: forall a. Ord a => Polar a -> a
$cminimum :: forall a. Ord a => Polar a -> a
minimum :: forall a. Ord a => Polar a -> a
$csum :: forall a. Num a => Polar a -> a
sum :: forall a. Num a => Polar a -> a
$cproduct :: forall a. Num a => Polar a -> a
product :: forall a. Num a => Polar a -> a
F.Foldable)
makeWrapped ''Polar
instance Distributive Polar where
distribute :: forall (f :: * -> *) a. Functor f => f (Polar a) -> Polar (f a)
distribute f (Polar a)
f = V2 (f a) -> Polar (f a)
forall a. V2 a -> Polar a
Polar (V2 (f a) -> Polar (f a)) -> V2 (f a) -> Polar (f a)
forall a b. (a -> b) -> a -> b
$ f a -> f a -> V2 (f a)
forall a. a -> a -> V2 a
V2 ((Polar a -> a) -> f (Polar a) -> f a
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(Polar (V2 a
x a
_)) -> a
x) f (Polar a)
f)
((Polar a -> a) -> f (Polar a) -> f a
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(Polar (V2 a
_ a
y)) -> a
y) f (Polar a)
f)
instance Representable Polar where
type Rep Polar = E Polar
tabulate :: forall a. (Rep Polar -> a) -> Polar a
tabulate Rep Polar -> a
f = V2 a -> Polar a
forall a. V2 a -> Polar a
Polar (V2 a -> Polar a) -> V2 a -> Polar a
forall a b. (a -> b) -> a -> b
$ a -> a -> V2 a
forall a. a -> a -> V2 a
V2 (Rep Polar -> a
f Rep Polar
E Polar
forall (v :: * -> *). Radial v => E v
er) (Rep Polar -> a
f Rep Polar
E Polar
forall (v :: * -> *). Circle v => E v
eθ)
index :: forall a. Polar a -> Rep Polar -> a
index Polar a
xs (E forall x. Lens' (Polar x) x
l) = Getting a (Polar a) a -> Polar a -> a
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting a (Polar a) a
forall x. Lens' (Polar x) x
l Polar a
xs
instance Circle Polar where
_azimuth :: forall a. Lens' (Polar a) (Angle a)
_azimuth = (V2 a -> f (V2 a)) -> Polar a -> f (Polar a)
forall a (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (V2 a) (f (V2 a)) -> p (Polar a) (f (Polar a))
polarWrapper ((V2 a -> f (V2 a)) -> Polar a -> f (Polar a))
-> ((Angle a -> f (Angle a)) -> V2 a -> f (V2 a))
-> (Angle a -> f (Angle a))
-> Polar a
-> f (Polar a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> V2 a -> f (V2 a)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R2 t => Lens' (t a) a
_y ((a -> f a) -> V2 a -> f (V2 a))
-> ((Angle a -> f (Angle a)) -> a -> f a)
-> (Angle a -> f (Angle a))
-> V2 a
-> f (V2 a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AnIso (Angle a) (Angle a) a a -> Iso a a (Angle a) (Angle a)
forall s t a b. AnIso s t a b -> Iso b a t s
from AnIso (Angle a) (Angle a) a a
forall n (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p n (f n) -> p (Angle n) (f (Angle n))
rad
_polar :: forall a. Lens' (Polar a) (Polar a)
_polar = (Polar a -> f (Polar a)) -> Polar a -> f (Polar a)
forall a. a -> a
id
instance HasR Polar where
_r :: forall n. RealFloat n => Lens' (Polar n) n
_r = (V2 n -> f (V2 n)) -> Polar n -> f (Polar n)
forall a (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (V2 a) (f (V2 a)) -> p (Polar a) (f (Polar a))
polarWrapper ((V2 n -> f (V2 n)) -> Polar n -> f (Polar n))
-> ((n -> f n) -> V2 n -> f (V2 n))
-> (n -> f n)
-> Polar n
-> f (Polar n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (n -> f n) -> V2 n -> f (V2 n)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R1 t => Lens' (t a) a
_x
mkPolar :: n -> Angle n -> Polar n
mkPolar :: forall n. n -> Angle n -> Polar n
mkPolar n
r Angle n
θ = V2 n -> Polar n
forall a. V2 a -> Polar a
Polar (V2 n -> Polar n) -> V2 n -> Polar n
forall a b. (a -> b) -> a -> b
$ n -> n -> V2 n
forall a. a -> a -> V2 a
V2 n
r (Angle n
θAngle n -> Getting n (Angle n) n -> n
forall s a. s -> Getting a s a -> a
^.Getting n (Angle n) n
forall n (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p n (f n) -> p (Angle n) (f (Angle n))
rad)
polar :: (n, Angle n) -> Polar n
polar :: forall n. (n, Angle n) -> Polar n
polar = (n -> Angle n -> Polar n) -> (n, Angle n) -> Polar n
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry n -> Angle n -> Polar n
forall n. n -> Angle n -> Polar n
mkPolar
unpolar :: Polar n -> (n, Angle n)
unpolar :: forall n. Polar n -> (n, Angle n)
unpolar (Polar (V2 n
r n
θ)) = (n
r, n
θ n -> AReview (Angle n) n -> Angle n
forall b a. b -> AReview a b -> a
@@ AReview (Angle n) n
forall n (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p n (f n) -> p (Angle n) (f (Angle n))
rad)
polarIso :: Iso' (Polar n) (n, Angle n)
polarIso :: forall n (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (n, Angle n) (f (n, Angle n)) -> p (Polar n) (f (Polar n))
polarIso = (Polar n -> (n, Angle n))
-> ((n, Angle n) -> Polar n)
-> Iso (Polar n) (Polar n) (n, Angle n) (n, Angle n)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Polar n -> (n, Angle n)
forall n. Polar n -> (n, Angle n)
unpolar (n, Angle n) -> Polar n
forall n. (n, Angle n) -> Polar n
polar
polarV2 :: RealFloat n => Iso' (Polar n) (V2 n)
polarV2 :: forall n. RealFloat n => Iso' (Polar n) (V2 n)
polarV2 = (Polar n -> V2 n)
-> (V2 n -> Polar n) -> Iso (Polar n) (Polar n) (V2 n) (V2 n)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (\(Polar (V2 n
r n
θ)) -> n -> n -> V2 n
forall a. a -> a -> V2 a
V2 (n
r n -> n -> n
forall a. Num a => a -> a -> a
* n -> n
forall a. Floating a => a -> a
cos n
θ) (n
r n -> n -> n
forall a. Num a => a -> a -> a
* n -> n
forall a. Floating a => a -> a
sin n
θ))
(\v :: V2 n
v@(V2 n
x n
y) -> V2 n -> Polar n
forall a. V2 a -> Polar a
Polar (V2 n -> Polar n) -> V2 n -> Polar n
forall a b. (a -> b) -> a -> b
$ n -> n -> V2 n
forall a. a -> a -> V2 a
V2 (V2 n -> n
forall a. Floating a => V2 a -> a
forall (f :: * -> *) a. (Metric f, Floating a) => f a -> a
norm V2 n
v) (n -> n -> n
forall a. RealFloat a => a -> a -> a
atan2 n
y n
x))
polarWrapper :: Iso' (Polar a) (V2 a)
polarWrapper :: forall a (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (V2 a) (f (V2 a)) -> p (Polar a) (f (Polar a))
polarWrapper = (Polar a -> V2 a)
-> (V2 a -> Polar a) -> Iso (Polar a) (Polar a) (V2 a) (V2 a)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (\(Polar V2 a
v) -> V2 a
v) V2 a -> Polar a
forall a. V2 a -> Polar a
Polar
interpPolar :: Num n => n -> Polar n -> Polar n -> Polar n
interpPolar :: forall n. Num n => n -> Polar n -> Polar n -> Polar n
interpPolar n
t (Polar V2 n
a) (Polar V2 n
b) = V2 n -> Polar n
forall a. V2 a -> Polar a
Polar (n -> V2 n -> V2 n -> V2 n
forall a. Num a => a -> V2 a -> V2 a -> V2 a
forall (f :: * -> *) a.
(Additive f, Num a) =>
a -> f a -> f a -> f a
lerp n
t V2 n
a V2 n
b)
class Radial t where
_radial :: Lens' (t a) a
instance Radial Polar where
_radial :: forall x. Lens' (Polar x) x
_radial = (V2 a -> f (V2 a)) -> Polar a -> f (Polar a)
forall a (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (V2 a) (f (V2 a)) -> p (Polar a) (f (Polar a))
polarWrapper ((V2 a -> f (V2 a)) -> Polar a -> f (Polar a))
-> ((a -> f a) -> V2 a -> f (V2 a))
-> (a -> f a)
-> Polar a
-> f (Polar a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> V2 a -> f (V2 a)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R1 t => Lens' (t a) a
_x
class Radial t => Circle t where
_azimuth :: Lens' (t a) (Angle a)
_polar :: Lens' (t a) (Polar a)
er :: Radial v => E v
er :: forall (v :: * -> *). Radial v => E v
er = (forall x. Lens' (v x) x) -> E v
forall (t :: * -> *). (forall x. Lens' (t x) x) -> E t
E (x -> f x) -> v x -> f (v x)
forall x. Lens' (v x) x
forall (t :: * -> *) a. Radial t => Lens' (t a) a
_radial
eθ, etheta :: Circle v => E v
eθ :: forall (v :: * -> *). Circle v => E v
eθ = (forall x. Lens' (v x) x) -> E v
forall (t :: * -> *). (forall x. Lens' (t x) x) -> E t
E ((Polar x -> f (Polar x)) -> v x -> f (v x)
forall a. Lens' (v a) (Polar a)
forall (t :: * -> *) a. Circle t => Lens' (t a) (Polar a)
_polar ((Polar x -> f (Polar x)) -> v x -> f (v x))
-> ((x -> f x) -> Polar x -> f (Polar x))
-> (x -> f x)
-> v x
-> f (v x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (V2 x -> f (V2 x)) -> Polar x -> f (Polar x)
forall a (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (V2 a) (f (V2 a)) -> p (Polar a) (f (Polar a))
polarWrapper ((V2 x -> f (V2 x)) -> Polar x -> f (Polar x))
-> ((x -> f x) -> V2 x -> f (V2 x))
-> (x -> f x)
-> Polar x
-> f (Polar x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (x -> f x) -> V2 x -> f (V2 x)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R2 t => Lens' (t a) a
_y)
etheta :: forall (v :: * -> *). Circle v => E v
etheta = E v
forall (v :: * -> *). Circle v => E v
eθ
class HasX t where
x_ :: RealFloat n => Lens' (t n) n
instance HasX v => HasX (Point v) where
x_ :: forall n. RealFloat n => Lens' (Point v n) n
x_ = (v n -> f (v n)) -> Point v n -> f (Point v n)
forall (f1 :: * -> *) a (g :: * -> *) b (p :: * -> * -> *)
(f2 :: * -> *).
(Profunctor p, Functor f2) =>
p (f1 a) (f2 (g b)) -> p (Point f1 a) (f2 (Point g b))
_Point ((v n -> f (v n)) -> Point v n -> f (Point v n))
-> ((n -> f n) -> v n -> f (v n))
-> (n -> f n)
-> Point v n
-> f (Point v n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (n -> f n) -> v n -> f (v n)
forall n. RealFloat n => Lens' (v n) n
Lens' (v n) n
forall (t :: * -> *) n. (HasX t, RealFloat n) => Lens' (t n) n
x_
instance HasX V2 where x_ :: forall n. RealFloat n => Lens' (V2 n) n
x_ = (n -> f n) -> V2 n -> f (V2 n)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R1 t => Lens' (t a) a
_x
instance HasX V3 where x_ :: forall n. RealFloat n => Lens' (V3 n) n
x_ = (n -> f n) -> V3 n -> f (V3 n)
forall a. Lens' (V3 a) a
forall (t :: * -> *) a. R1 t => Lens' (t a) a
_x
instance HasX Polar where x_ :: forall n. RealFloat n => Lens' (Polar n) n
x_ = (V2 n -> f (V2 n)) -> Polar n -> f (Polar n)
forall n. RealFloat n => Iso' (Polar n) (V2 n)
Iso' (Polar n) (V2 n)
polarV2 ((V2 n -> f (V2 n)) -> Polar n -> f (Polar n))
-> ((n -> f n) -> V2 n -> f (V2 n))
-> (n -> f n)
-> Polar n
-> f (Polar n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (n -> f n) -> V2 n -> f (V2 n)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R1 t => Lens' (t a) a
_x
class HasX t => HasY t where
y_ :: RealFloat n => Lens' (t n) n
y_ = (V2 n -> f (V2 n)) -> t n -> f (t n)
forall n. RealFloat n => Lens' (t n) (V2 n)
Lens' (t n) (V2 n)
forall (t :: * -> *) n. (HasY t, RealFloat n) => Lens' (t n) (V2 n)
xy_ ((V2 n -> f (V2 n)) -> t n -> f (t n))
-> ((n -> f n) -> V2 n -> f (V2 n)) -> (n -> f n) -> t n -> f (t n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (n -> f n) -> V2 n -> f (V2 n)
forall a. Lens' (V2 a) a
forall (t :: * -> *) a. R2 t => Lens' (t a) a
_y
xy_ :: RealFloat n => Lens' (t n) (V2 n)
instance HasY v => HasY (Point v) where
xy_ :: forall n. RealFloat n => Lens' (Point v n) (V2 n)
xy_ = (v n -> f (v n)) -> Point v n -> f (Point v n)
forall (f1 :: * -> *) a (g :: * -> *) b (f2 :: * -> *).
Functor f2 =>
(f1 a -> f2 (g b)) -> Point f1 a -> f2 (Point g b)
lensP ((v n -> f (v n)) -> Point v n -> f (Point v n))
-> ((V2 n -> f (V2 n)) -> v n -> f (v n))
-> (V2 n -> f (V2 n))
-> Point v n
-> f (Point v n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (V2 n -> f (V2 n)) -> v n -> f (v n)
forall n. RealFloat n => Lens' (v n) (V2 n)
Lens' (v n) (V2 n)
forall (t :: * -> *) n. (HasY t, RealFloat n) => Lens' (t n) (V2 n)
xy_
instance HasY V2 where xy_ :: forall n. RealFloat n => Lens' (V2 n) (V2 n)
xy_ = (V2 n -> f (V2 n)) -> V2 n -> f (V2 n)
forall a. Lens' (V2 a) (V2 a)
forall (t :: * -> *) a. R2 t => Lens' (t a) (V2 a)
_xy
instance HasY V3 where xy_ :: forall n. RealFloat n => Lens' (V3 n) (V2 n)
xy_ = (V2 n -> f (V2 n)) -> V3 n -> f (V3 n)
forall a. Lens' (V3 a) (V2 a)
forall (t :: * -> *) a. R2 t => Lens' (t a) (V2 a)
_xy
instance HasY Polar where xy_ :: forall n. RealFloat n => Lens' (Polar n) (V2 n)
xy_ = (V2 n -> f (V2 n)) -> Polar n -> f (Polar n)
forall n. RealFloat n => Iso' (Polar n) (V2 n)
Iso' (Polar n) (V2 n)
polarV2
instance RealFloat n => PointLike V2 n (Polar n) where
pointLike :: Iso' (Point V2 n) (Polar n)
pointLike = p (V2 n) (f (V2 n)) -> p (Point V2 n) (f (Point V2 n))
forall (f1 :: * -> *) a (g :: * -> *) b (p :: * -> * -> *)
(f2 :: * -> *).
(Profunctor p, Functor f2) =>
p (f1 a) (f2 (g b)) -> p (Point f1 a) (f2 (Point g b))
_Point (p (V2 n) (f (V2 n)) -> p (Point V2 n) (f (Point V2 n)))
-> (p (Polar n) (f (Polar n)) -> p (V2 n) (f (V2 n)))
-> p (Polar n) (f (Polar n))
-> p (Point V2 n) (f (Point V2 n))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AnIso (Polar n) (Polar n) (V2 n) (V2 n)
-> Iso (V2 n) (V2 n) (Polar n) (Polar n)
forall s t a b. AnIso s t a b -> Iso b a t s
from AnIso (Polar n) (Polar n) (V2 n) (V2 n)
forall n. RealFloat n => Iso' (Polar n) (V2 n)
Iso' (Polar n) (V2 n)
polarV2
{-# INLINE pointLike #-}