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