{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Plots.Types
(
PlotOptions
, HasPlotOptions (..)
, key
, addLegendEntry
, PlotMods
, plotMods
, Plotable (..)
, Plot
, mkPlot
, rawPlot
, DynamicPlot (..)
, _DynamicPlot
, dynamicPlot
, dynamicPlotMods
, StyledPlot
, styledPlot
, styleDynamic
, renderStyledPlot
, singleStyledPlotLegend
, styledPlotLegends
, HasVisibility (..)
, hide
, display
, Orientation (..)
, HasOrientation (..)
, orient
, horizontal
, vertical
, LegendEntry
, LegendPic (..)
, mkLegendEntry
, legendPicture
, legendText
, legendPrecedence
, AxisSpec (..)
, specTrans
, specBounds
, specScale
, scaleNum
, specPoint
, specColourMap
, Placement (..)
, HasPlacement (..)
, HasGap (..)
, placeAgainst
, topLeft, top, topRight, left, right, bottomLeft, bottom
, bottomRight
, leftAbove, leftTop, leftMid, leftBottom, leftBelow, midAbove, midBelow
, rightAbove, rightTop, rightMid, rightBottom, rightBelow
) where
import Control.Monad.State
import Data.Bool
import Data.List (sortBy)
import Data.Maybe (fromMaybe)
import Data.Ord (comparing)
import Data.Orphans ()
import Data.Typeable
import Diagrams.Prelude as D
import Plots.Axis.Scale
import Plots.Style
import Plots.Util
data Orientation = Horizontal | Vertical
deriving (Int -> Orientation -> ShowS
[Orientation] -> ShowS
Orientation -> String
(Int -> Orientation -> ShowS)
-> (Orientation -> String)
-> ([Orientation] -> ShowS)
-> Show Orientation
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Orientation -> ShowS
showsPrec :: Int -> Orientation -> ShowS
$cshow :: Orientation -> String
show :: Orientation -> String
$cshowList :: [Orientation] -> ShowS
showList :: [Orientation] -> ShowS
Show, Orientation -> Orientation -> Bool
(Orientation -> Orientation -> Bool)
-> (Orientation -> Orientation -> Bool) -> Eq Orientation
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Orientation -> Orientation -> Bool
== :: Orientation -> Orientation -> Bool
$c/= :: Orientation -> Orientation -> Bool
/= :: Orientation -> Orientation -> Bool
Eq, Eq Orientation
Eq Orientation =>
(Orientation -> Orientation -> Ordering)
-> (Orientation -> Orientation -> Bool)
-> (Orientation -> Orientation -> Bool)
-> (Orientation -> Orientation -> Bool)
-> (Orientation -> Orientation -> Bool)
-> (Orientation -> Orientation -> Orientation)
-> (Orientation -> Orientation -> Orientation)
-> Ord Orientation
Orientation -> Orientation -> Bool
Orientation -> Orientation -> Ordering
Orientation -> Orientation -> Orientation
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Orientation -> Orientation -> Ordering
compare :: Orientation -> Orientation -> Ordering
$c< :: Orientation -> Orientation -> Bool
< :: Orientation -> Orientation -> Bool
$c<= :: Orientation -> Orientation -> Bool
<= :: Orientation -> Orientation -> Bool
$c> :: Orientation -> Orientation -> Bool
> :: Orientation -> Orientation -> Bool
$c>= :: Orientation -> Orientation -> Bool
>= :: Orientation -> Orientation -> Bool
$cmax :: Orientation -> Orientation -> Orientation
max :: Orientation -> Orientation -> Orientation
$cmin :: Orientation -> Orientation -> Orientation
min :: Orientation -> Orientation -> Orientation
Ord, Typeable)
orient :: HasOrientation o => o -> a -> a -> a
orient :: forall o a. HasOrientation o => o -> a -> a -> a
orient o
o a
h a
v =
case Getting Orientation o Orientation -> o -> Orientation
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Orientation o Orientation
forall a. HasOrientation a => Lens' a Orientation
Lens' o Orientation
orientation o
o of
Orientation
Horizontal -> a
h
Orientation
Vertical -> a
v
class HasOrientation a where
orientation :: Lens' a Orientation
instance HasOrientation Orientation where
orientation :: Lens' Orientation Orientation
orientation = (Orientation -> f Orientation) -> Orientation -> f Orientation
forall a. a -> a
id
horizontal :: HasOrientation a => Lens' a Bool
horizontal :: forall a. HasOrientation a => Lens' a Bool
horizontal = (Orientation -> f Orientation) -> a -> f a
forall a. HasOrientation a => Lens' a Orientation
Lens' a Orientation
orientation ((Orientation -> f Orientation) -> a -> f a)
-> ((Bool -> f Bool) -> Orientation -> f Orientation)
-> (Bool -> f Bool)
-> a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Orientation -> Bool)
-> (Bool -> Orientation) -> Iso Orientation Orientation Bool Bool
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (Orientation -> Orientation -> Bool
forall a. Eq a => a -> a -> Bool
==Orientation
Horizontal) (Orientation -> Orientation -> Bool -> Orientation
forall a. a -> a -> Bool -> a
bool Orientation
Vertical Orientation
Horizontal)
vertical :: HasOrientation a => Lens' a Bool
vertical :: forall a. HasOrientation a => Lens' a Bool
vertical = (Bool -> f Bool) -> a -> f a
forall a. HasOrientation a => Lens' a Bool
Lens' a Bool
horizontal ((Bool -> f Bool) -> a -> f a)
-> ((Bool -> f Bool) -> Bool -> f Bool)
-> (Bool -> f Bool)
-> a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> Bool) -> Iso' Bool Bool
forall a. (a -> a) -> Iso' a a
involuted Bool -> Bool
not
class HasGap a where
gap :: Lens' a (N a)
data Placement = Placement
{ Placement -> V2 Rational
pAt :: V2 Rational
, Placement -> V2 Rational
pAnchor :: V2 Rational
, Placement -> Direction V2 Rational
pGapDir :: Direction V2 Rational
}
deriving (Int -> Placement -> ShowS
[Placement] -> ShowS
Placement -> String
(Int -> Placement -> ShowS)
-> (Placement -> String)
-> ([Placement] -> ShowS)
-> Show Placement
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Placement -> ShowS
showsPrec :: Int -> Placement -> ShowS
$cshow :: Placement -> String
show :: Placement -> String
$cshowList :: [Placement] -> ShowS
showList :: [Placement] -> ShowS
Show, ReadPrec [Placement]
ReadPrec Placement
Int -> ReadS Placement
ReadS [Placement]
(Int -> ReadS Placement)
-> ReadS [Placement]
-> ReadPrec Placement
-> ReadPrec [Placement]
-> Read Placement
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Placement
readsPrec :: Int -> ReadS Placement
$creadList :: ReadS [Placement]
readList :: ReadS [Placement]
$creadPrec :: ReadPrec Placement
readPrec :: ReadPrec Placement
$creadListPrec :: ReadPrec [Placement]
readListPrec :: ReadPrec [Placement]
Read, Placement -> Placement -> Bool
(Placement -> Placement -> Bool)
-> (Placement -> Placement -> Bool) -> Eq Placement
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Placement -> Placement -> Bool
== :: Placement -> Placement -> Bool
$c/= :: Placement -> Placement -> Bool
/= :: Placement -> Placement -> Bool
Eq, Eq Placement
Eq Placement =>
(Placement -> Placement -> Ordering)
-> (Placement -> Placement -> Bool)
-> (Placement -> Placement -> Bool)
-> (Placement -> Placement -> Bool)
-> (Placement -> Placement -> Bool)
-> (Placement -> Placement -> Placement)
-> (Placement -> Placement -> Placement)
-> Ord Placement
Placement -> Placement -> Bool
Placement -> Placement -> Ordering
Placement -> Placement -> Placement
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Placement -> Placement -> Ordering
compare :: Placement -> Placement -> Ordering
$c< :: Placement -> Placement -> Bool
< :: Placement -> Placement -> Bool
$c<= :: Placement -> Placement -> Bool
<= :: Placement -> Placement -> Bool
$c> :: Placement -> Placement -> Bool
> :: Placement -> Placement -> Bool
$c>= :: Placement -> Placement -> Bool
>= :: Placement -> Placement -> Bool
$cmax :: Placement -> Placement -> Placement
max :: Placement -> Placement -> Placement
$cmin :: Placement -> Placement -> Placement
min :: Placement -> Placement -> Placement
Ord)
class HasPlacement a where
placement :: Lens' a Placement
placementAt :: Lens' a (V2 Rational)
placementAt = (Placement -> f Placement) -> a -> f a
forall a. HasPlacement a => Lens' a Placement
Lens' a Placement
placement ((Placement -> f Placement) -> a -> f a)
-> ((V2 Rational -> f (V2 Rational)) -> Placement -> f Placement)
-> (V2 Rational -> f (V2 Rational))
-> a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Placement -> V2 Rational)
-> (Placement -> V2 Rational -> Placement)
-> Lens Placement Placement (V2 Rational) (V2 Rational)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Placement -> V2 Rational
pAt (\Placement
p V2 Rational
a -> Placement
p {pAt = a})
placementAnchor :: Lens' a (V2 Rational)
placementAnchor = (Placement -> f Placement) -> a -> f a
forall a. HasPlacement a => Lens' a Placement
Lens' a Placement
placement ((Placement -> f Placement) -> a -> f a)
-> ((V2 Rational -> f (V2 Rational)) -> Placement -> f Placement)
-> (V2 Rational -> f (V2 Rational))
-> a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Placement -> V2 Rational)
-> (Placement -> V2 Rational -> Placement)
-> Lens Placement Placement (V2 Rational) (V2 Rational)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Placement -> V2 Rational
pAnchor (\Placement
p V2 Rational
a -> Placement
p {pAnchor = a})
gapDirection :: Lens' a (Direction V2 Rational)
gapDirection = (Placement -> f Placement) -> a -> f a
forall a. HasPlacement a => Lens' a Placement
Lens' a Placement
placement ((Placement -> f Placement) -> a -> f a)
-> ((Direction V2 Rational -> f (Direction V2 Rational))
-> Placement -> f Placement)
-> (Direction V2 Rational -> f (Direction V2 Rational))
-> a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Placement -> Direction V2 Rational)
-> (Placement -> Direction V2 Rational -> Placement)
-> Lens
Placement Placement (Direction V2 Rational) (Direction V2 Rational)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Placement -> Direction V2 Rational
pGapDir (\Placement
p Direction V2 Rational
a -> Placement
p {pGapDir = a})
instance HasPlacement Placement where
placement :: Lens' Placement Placement
placement = (Placement -> f Placement) -> Placement -> f Placement
forall a. a -> a
id
pInside :: V2 Rational -> Placement
pInside :: V2 Rational -> Placement
pInside V2 Rational
v = Placement
{ pAt :: V2 Rational
pAt = V2 Rational
v
, pAnchor :: V2 Rational
pAnchor = V2 Rational
v
, pGapDir :: Direction V2 Rational
pGapDir = Point V2 Rational -> Point V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n.
(Additive v, Num n) =>
Point v n -> Point v n -> Direction v n
dirBetween' (V2 Rational -> Point V2 Rational
forall (f :: * -> *) a. f a -> Point f a
P V2 Rational
v) Point V2 Rational
forall (f :: * -> *) a. (Additive f, Num a) => Point f a
origin
}
dirBetween' :: (Additive v, Num n) => Point v n -> Point v n -> Direction v n
dirBetween' :: forall (v :: * -> *) n.
(Additive v, Num n) =>
Point v n -> Point v n -> Direction v n
dirBetween' Point v n
p Point v n
q = v n -> Direction v n
forall (v :: * -> *) n. v n -> Direction v n
direction (v n -> Direction v n) -> v n -> Direction v n
forall a b. (a -> b) -> a -> b
$ Point v n
q Point v n -> Point v n -> Diff (Point v) n
forall a. Num a => Point v a -> Point v a -> Diff (Point v) a
forall (p :: * -> *) a. (Affine p, Num a) => p a -> p a -> Diff p a
.-. Point v n
p
topLeft, top, topRight, left, right, bottomLeft, bottom, bottomRight :: Placement
topLeft :: Placement
topLeft = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
1 )
top :: Placement
top = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 Rational
1 )
topRight :: Placement
topRight = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
1 )
left :: Placement
left = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 )
right :: Placement
right = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 )
bottomLeft :: Placement
bottomLeft = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) (-Rational
1))
bottom :: Placement
bottom = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 (-Rational
1))
bottomRight :: Placement
bottomRight = V2 Rational -> Placement
pInside (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 (-Rational
1))
leftAbove, leftTop, leftMid, leftBottom, leftBelow, midAbove, midBelow,
rightAbove, rightTop, rightMid, rightBottom, rightBelow :: Placement
leftAbove :: Placement
leftAbove = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
1 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) (-Rational
1)) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 Rational
1 ))
leftTop :: Placement
leftTop = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
1 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
1 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 ))
leftMid :: Placement
leftMid = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
0 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 ))
leftBottom :: Placement
leftBottom = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) (-Rational
1)) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 (-Rational
1)) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 ))
leftBelow :: Placement
leftBelow = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) (-Rational
1)) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
1 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 (-Rational
1)))
midAbove :: Placement
midAbove = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 Rational
1 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 (-Rational
1)) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 Rational
1 ))
midBelow :: Placement
midBelow = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 (-Rational
1)) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 Rational
1 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 (-Rational
1)))
rightAbove :: Placement
rightAbove = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
1 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 (-Rational
1)) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 Rational
1 ))
rightTop :: Placement
rightTop = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
1 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
1 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
0 ))
rightMid :: Placement
rightMid = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
0 ) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) Rational
0 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
0 ))
rightBottom :: Placement
rightBottom = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 (-Rational
1)) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 (-Rational
1) (-Rational
1)) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
0 ))
rightBelow :: Placement
rightBelow = V2 Rational -> V2 Rational -> Direction V2 Rational -> Placement
Placement (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 (-Rational
1)) (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
1 Rational
1 ) (V2 Rational -> Direction V2 Rational
forall (v :: * -> *) n. v n -> Direction v n
direction (Rational -> Rational -> V2 Rational
forall a. a -> a -> V2 a
V2 Rational
0 (-Rational
1)))
placeAgainst
:: (InSpace V2 n a, SameSpace a b, Enveloped a,
HasOrigin b, Alignable b)
=> a -> Placement -> n -> b -> b
placeAgainst :: forall n a b.
(InSpace V2 n a, SameSpace a b, Enveloped a, HasOrigin b,
Alignable b) =>
a -> Placement -> n -> b -> b
placeAgainst a
a (Placement (V2 Rational
px Rational
py) (V2 Rational
ax Rational
ay) Direction V2 Rational
d) n
n b
b
= b
b b -> (b -> b) -> b
forall a b. a -> (a -> b) -> b
# b -> b
anchor
# moveTo (pos .+^ n *^ fromDirection (fmap fromRational d))
where
pos :: Point V2 n
pos = n -> n -> Point V2 n
forall n. n -> n -> P2 n
mkP2 (Rational -> n -> n -> n
forall {a}. Fractional a => Rational -> a -> a -> a
lerp' Rational
px n
xu n
xl) (Rational -> n -> n -> n
forall {a}. Fractional a => Rational -> a -> a -> a
lerp' Rational
py n
yu n
yl)
anchor :: b -> b
anchor = V2 n -> n -> b -> b
forall a (v :: * -> *) n.
(Alignable a, InSpace v n a, Fractional n, HasOrigin a) =>
v n -> n -> a -> a
forall (v :: * -> *) n.
(InSpace v n b, Fractional n, HasOrigin b) =>
v n -> n -> b -> b
alignBy V2 n
forall (v :: * -> *) n. (R1 v, Additive v, Num n) => v n
unitX (Rational -> n
forall a. Fractional a => Rational -> a
fromRational Rational
ax) (b -> b) -> (b -> b) -> b -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. V2 n -> n -> b -> b
forall a (v :: * -> *) n.
(Alignable a, InSpace v n a, Fractional n, HasOrigin a) =>
v n -> n -> a -> a
forall (v :: * -> *) n.
(InSpace v n b, Fractional n, HasOrigin b) =>
v n -> n -> b -> b
alignBy V2 n
forall (v :: * -> *) n. (R2 v, Additive v, Num n) => v n
unitY (Rational -> n
forall a. Fractional a => Rational -> a
fromRational Rational
ay)
(P (V2 n
xl n
yl), P (V2 n
xu n
yu)) = (Point V2 n, Point V2 n)
-> Maybe (Point V2 n, Point V2 n) -> (Point V2 n, Point V2 n)
forall a. a -> Maybe a -> a
fromMaybe (Point V2 n
forall (f :: * -> *) a. (Additive f, Num a) => Point f a
origin, Point V2 n
forall (f :: * -> *) a. (Additive f, Num a) => Point f a
origin) (BoundingBox V2 n -> Maybe (Point V2 n, Point V2 n)
forall (v :: * -> *) n.
BoundingBox v n -> Maybe (Point v n, Point v n)
getCorners (BoundingBox V2 n -> Maybe (Point V2 n, Point V2 n))
-> BoundingBox V2 n -> Maybe (Point V2 n, Point V2 n)
forall a b. (a -> b) -> a -> b
$ a -> BoundingBox V2 n
forall (v :: * -> *) n a.
(InSpace v n a, HasBasis v, Enveloped a) =>
a -> BoundingBox v n
boundingBox a
a)
lerp' :: Rational -> a -> a -> a
lerp' Rational
z a
u a
v = Rational -> a
forall a. Fractional a => Rational -> a
fromRational Rational
alpha a -> a -> a
forall a. Num a => a -> a -> a
* a
u a -> a -> a
forall a. Num a => a -> a -> a
+ (a
1 a -> a -> a
forall a. Num a => a -> a -> a
- Rational -> a
forall a. Fractional a => Rational -> a
fromRational Rational
alpha) a -> a -> a
forall a. Num a => a -> a -> a
* a
v
where alpha :: Rational
alpha = (Rational
z Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
+ Rational
1) Rational -> Rational -> Rational
forall a. Fractional a => a -> a -> a
/ Rational
2
data LegendPic b v n
= DefaultLegendPic
| CustomLegendPic (PlotStyle b v n -> QDiagram b v n Any)
instance Default (LegendPic b v n) where
def :: LegendPic b v n
def = LegendPic b v n
forall b (v :: * -> *) n. LegendPic b v n
DefaultLegendPic
data LegendEntry b v n = LegendEntry
{ forall b (v :: * -> *) n. LegendEntry b v n -> LegendPic b v n
lPic :: LegendPic b v n
, forall b (v :: * -> *) n. LegendEntry b v n -> String
lText :: String
, forall b (v :: * -> *) n. LegendEntry b v n -> n
lPrecedence :: n
} deriving Typeable
legendPicture :: Lens' (LegendEntry b v n) (LegendPic b v n)
legendPicture :: forall b (v :: * -> *) n (f :: * -> *).
Functor f =>
(LegendPic b v n -> f (LegendPic b v n))
-> LegendEntry b v n -> f (LegendEntry b v n)
legendPicture = (LegendEntry b v n -> LegendPic b v n)
-> (LegendEntry b v n -> LegendPic b v n -> LegendEntry b v n)
-> Lens
(LegendEntry b v n)
(LegendEntry b v n)
(LegendPic b v n)
(LegendPic b v n)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens LegendEntry b v n -> LegendPic b v n
forall b (v :: * -> *) n. LegendEntry b v n -> LegendPic b v n
lPic (\LegendEntry b v n
l LegendPic b v n
pic -> LegendEntry b v n
l {lPic = pic})
legendText :: Lens' (LegendEntry b v n) String
legendText :: forall b (v :: * -> *) n (f :: * -> *).
Functor f =>
(String -> f String) -> LegendEntry b v n -> f (LegendEntry b v n)
legendText = (LegendEntry b v n -> String)
-> (LegendEntry b v n -> String -> LegendEntry b v n)
-> Lens (LegendEntry b v n) (LegendEntry b v n) String String
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens LegendEntry b v n -> String
forall b (v :: * -> *) n. LegendEntry b v n -> String
lText (\LegendEntry b v n
l String
txt -> LegendEntry b v n
l {lText = txt})
legendPrecedence :: Lens' (LegendEntry b v n) n
legendPrecedence :: forall b (v :: * -> *) n (f :: * -> *).
Functor f =>
(n -> f n) -> LegendEntry b v n -> f (LegendEntry b v n)
legendPrecedence = (LegendEntry b v n -> n)
-> (LegendEntry b v n -> n -> LegendEntry b v n)
-> Lens (LegendEntry b v n) (LegendEntry b v n) n n
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens LegendEntry b v n -> n
forall b (v :: * -> *) n. LegendEntry b v n -> n
lPrecedence (\LegendEntry b v n
l n
n -> LegendEntry b v n
l {lPrecedence = n})
type instance V (LegendEntry b v n) = v
type instance N (LegendEntry b v n) = n
mkLegendEntry :: Num n => String -> LegendEntry b v n
mkLegendEntry :: forall n b (v :: * -> *). Num n => String -> LegendEntry b v n
mkLegendEntry String
x = LegendPic b v n -> String -> n -> LegendEntry b v n
forall b (v :: * -> *) n.
LegendPic b v n -> String -> n -> LegendEntry b v n
LegendEntry LegendPic b v n
forall b (v :: * -> *) n. LegendPic b v n
DefaultLegendPic String
x n
0
data PlotOptions b v n = PlotOptions
{ forall b (v :: * -> *) n. PlotOptions b v n -> Name
poName :: Name
, forall b (v :: * -> *) n. PlotOptions b v n -> Bool
poClipPlot :: Bool
, forall b (v :: * -> *) n. PlotOptions b v n -> [LegendEntry b v n]
poLegend :: [LegendEntry b v n]
, forall b (v :: * -> *) n. PlotOptions b v n -> Bool
poVisible :: Bool
, forall b (v :: * -> *) n. PlotOptions b v n -> Transformation v n
poTransform :: Transformation v n
} deriving Typeable
type instance V (PlotOptions b v n) = v
type instance N (PlotOptions b v n) = n
class HasPlotOptions f a b | a -> b where
{-# MINIMAL plotOptions #-}
plotOptions :: LensLike' f a (PlotOptions b (V a) (N a))
plotName :: Functor f => LensLike' f a Name
plotName = LensLike' f a (PlotOptions b (V a) (N a))
forall (f :: * -> *) a b.
HasPlotOptions f a b =>
LensLike' f a (PlotOptions b (V a) (N a))
plotOptions LensLike' f a (PlotOptions b (V a) (N a))
-> ((Name -> f Name)
-> PlotOptions b (V a) (N a) -> f (PlotOptions b (V a) (N a)))
-> LensLike' f a Name
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotOptions b (V a) (N a) -> Name)
-> (PlotOptions b (V a) (N a) -> Name -> PlotOptions b (V a) (N a))
-> Lens
(PlotOptions b (V a) (N a)) (PlotOptions b (V a) (N a)) Name Name
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PlotOptions b (V a) (N a) -> Name
forall b (v :: * -> *) n. PlotOptions b v n -> Name
poName (\PlotOptions b (V a) (N a)
g Name
a -> PlotOptions b (V a) (N a)
g {poName = a})
{-# INLINE plotName #-}
clipPlot :: Functor f => LensLike' f a Bool
clipPlot = LensLike' f a (PlotOptions b (V a) (N a))
forall (f :: * -> *) a b.
HasPlotOptions f a b =>
LensLike' f a (PlotOptions b (V a) (N a))
plotOptions LensLike' f a (PlotOptions b (V a) (N a))
-> ((Bool -> f Bool)
-> PlotOptions b (V a) (N a) -> f (PlotOptions b (V a) (N a)))
-> LensLike' f a Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotOptions b (V a) (N a) -> Bool)
-> (PlotOptions b (V a) (N a) -> Bool -> PlotOptions b (V a) (N a))
-> Lens
(PlotOptions b (V a) (N a)) (PlotOptions b (V a) (N a)) Bool Bool
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PlotOptions b (V a) (N a) -> Bool
forall b (v :: * -> *) n. PlotOptions b v n -> Bool
poClipPlot (\PlotOptions b (V a) (N a)
g Bool
a -> PlotOptions b (V a) (N a)
g {poClipPlot = a})
{-# INLINE clipPlot #-}
legendEntries :: Functor f => LensLike' f a [LegendEntry b (V a) (N a)]
legendEntries = LensLike' f a (PlotOptions b (V a) (N a))
forall (f :: * -> *) a b.
HasPlotOptions f a b =>
LensLike' f a (PlotOptions b (V a) (N a))
plotOptions LensLike' f a (PlotOptions b (V a) (N a))
-> (([LegendEntry b (V a) (N a)] -> f [LegendEntry b (V a) (N a)])
-> PlotOptions b (V a) (N a) -> f (PlotOptions b (V a) (N a)))
-> LensLike' f a [LegendEntry b (V a) (N a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotOptions b (V a) (N a) -> [LegendEntry b (V a) (N a)])
-> (PlotOptions b (V a) (N a)
-> [LegendEntry b (V a) (N a)] -> PlotOptions b (V a) (N a))
-> Lens
(PlotOptions b (V a) (N a))
(PlotOptions b (V a) (N a))
[LegendEntry b (V a) (N a)]
[LegendEntry b (V a) (N a)]
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PlotOptions b (V a) (N a) -> [LegendEntry b (V a) (N a)]
forall b (v :: * -> *) n. PlotOptions b v n -> [LegendEntry b v n]
poLegend (\PlotOptions b (V a) (N a)
g [LegendEntry b (V a) (N a)]
a -> PlotOptions b (V a) (N a)
g {poLegend = a})
{-# INLINE legendEntries #-}
plotTransform :: Functor f => LensLike' f a (Transformation (V a) (N a))
plotTransform = LensLike' f a (PlotOptions b (V a) (N a))
forall (f :: * -> *) a b.
HasPlotOptions f a b =>
LensLike' f a (PlotOptions b (V a) (N a))
plotOptions LensLike' f a (PlotOptions b (V a) (N a))
-> ((Transformation (V a) (N a) -> f (Transformation (V a) (N a)))
-> PlotOptions b (V a) (N a) -> f (PlotOptions b (V a) (N a)))
-> LensLike' f a (Transformation (V a) (N a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotOptions b (V a) (N a) -> Transformation (V a) (N a))
-> (PlotOptions b (V a) (N a)
-> Transformation (V a) (N a) -> PlotOptions b (V a) (N a))
-> Lens
(PlotOptions b (V a) (N a))
(PlotOptions b (V a) (N a))
(Transformation (V a) (N a))
(Transformation (V a) (N a))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PlotOptions b (V a) (N a) -> Transformation (V a) (N a)
forall b (v :: * -> *) n. PlotOptions b v n -> Transformation v n
poTransform (\PlotOptions b (V a) (N a)
g Transformation (V a) (N a)
a -> PlotOptions b (V a) (N a)
g {poTransform = a})
{-# INLINE plotTransform #-}
plotVisible :: Functor f => LensLike' f a Bool
plotVisible = LensLike' f a (PlotOptions b (V a) (N a))
forall (f :: * -> *) a b.
HasPlotOptions f a b =>
LensLike' f a (PlotOptions b (V a) (N a))
plotOptions LensLike' f a (PlotOptions b (V a) (N a))
-> ((Bool -> f Bool)
-> PlotOptions b (V a) (N a) -> f (PlotOptions b (V a) (N a)))
-> LensLike' f a Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotOptions b (V a) (N a) -> Bool)
-> (PlotOptions b (V a) (N a) -> Bool -> PlotOptions b (V a) (N a))
-> Lens
(PlotOptions b (V a) (N a)) (PlotOptions b (V a) (N a)) Bool Bool
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PlotOptions b (V a) (N a) -> Bool
forall b (v :: * -> *) n. PlotOptions b v n -> Bool
poVisible (\PlotOptions b (V a) (N a)
po Bool
b -> PlotOptions b (V a) (N a)
po {poVisible = b})
{-# INLINE plotVisible #-}
instance (Additive v, Num n) => Default (PlotOptions b v n) where
def :: PlotOptions b v n
def = PlotOptions
{ poName :: Name
poName = Name
forall a. Monoid a => a
mempty
, poClipPlot :: Bool
poClipPlot = Bool
True
, poLegend :: [LegendEntry b v n]
poLegend = []
, poVisible :: Bool
poVisible = Bool
True
, poTransform :: Transformation v n
poTransform = Transformation v n
forall a. Monoid a => a
mempty
}
instance HasPlotOptions f (PlotOptions b v n) b where
plotOptions :: LensLike'
f
(PlotOptions b v n)
(PlotOptions b (V (PlotOptions b v n)) (N (PlotOptions b v n)))
plotOptions = (PlotOptions b v n -> f (PlotOptions b v n))
-> PlotOptions b v n -> f (PlotOptions b v n)
LensLike'
f
(PlotOptions b v n)
(PlotOptions b (V (PlotOptions b v n)) (N (PlotOptions b v n)))
forall a. a -> a
id
{-# INLINE plotOptions #-}
instance (HasLinearMap v, Num n) => Transformable (PlotOptions b v n) where
transform :: Transformation (V (PlotOptions b v n)) (N (PlotOptions b v n))
-> PlotOptions b v n -> PlotOptions b v n
transform = ASetter
(PlotOptions b v n)
(PlotOptions b v n)
(Transformation v n)
(Transformation v n)
-> (Transformation v n -> Transformation v n)
-> PlotOptions b v n
-> PlotOptions b v n
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter
(PlotOptions b v n)
(PlotOptions b v n)
(Transformation v n)
(Transformation v n)
LensLike'
Identity
(PlotOptions b v n)
(Transformation (V (PlotOptions b v n)) (N (PlotOptions b v n)))
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a (Transformation (V a) (N a))
plotTransform ((Transformation v n -> Transformation v n)
-> PlotOptions b v n -> PlotOptions b v n)
-> (Transformation v n -> Transformation v n -> Transformation v n)
-> Transformation v n
-> PlotOptions b v n
-> PlotOptions b v n
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transformation v n -> Transformation v n -> Transformation v n
Transformation (V (Transformation v n)) (N (Transformation v n))
-> Transformation v n -> Transformation v n
forall t. Transformable t => Transformation (V t) (N t) -> t -> t
transform
instance (Additive v, Num n) => HasOrigin (PlotOptions b v n) where
moveOriginTo :: Point (V (PlotOptions b v n)) (N (PlotOptions b v n))
-> PlotOptions b v n -> PlotOptions b v n
moveOriginTo = ASetter
(PlotOptions b v n)
(PlotOptions b v n)
(Transformation v n)
(Transformation v n)
-> (Transformation v n -> Transformation v n)
-> PlotOptions b v n
-> PlotOptions b v n
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter
(PlotOptions b v n)
(PlotOptions b v n)
(Transformation v n)
(Transformation v n)
LensLike'
Identity
(PlotOptions b v n)
(Transformation (V (PlotOptions b v n)) (N (PlotOptions b v n)))
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a (Transformation (V a) (N a))
plotTransform ((Transformation v n -> Transformation v n)
-> PlotOptions b v n -> PlotOptions b v n)
-> (Point v n -> Transformation v n -> Transformation v n)
-> Point v n
-> PlotOptions b v n
-> PlotOptions b v n
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Point v n -> Transformation v n -> Transformation v n
Point (V (Transformation v n)) (N (Transformation v n))
-> Transformation v n -> Transformation v n
forall t. HasOrigin t => Point (V t) (N t) -> t -> t
moveOriginTo
instance Qualifiable (PlotOptions b v n) where
a
n .>> :: forall a. IsName a => a -> PlotOptions b v n -> PlotOptions b v n
.>> PlotOptions b v n
p = ASetter (PlotOptions b v n) (PlotOptions b v n) Name Name
-> (Name -> Name) -> PlotOptions b v n -> PlotOptions b v n
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter (PlotOptions b v n) (PlotOptions b v n) Name Name
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Name
plotName (a
n a -> Name -> Name
forall q a. (Qualifiable q, IsName a) => a -> q -> q
forall a. IsName a => a -> Name -> Name
.>>) PlotOptions b v n
p
key :: (HasPlotOptions Identity a b, MonadState a m, Num (N a)) => String -> m ()
key :: forall a b (m :: * -> *).
(HasPlotOptions Identity a b, MonadState a m, Num (N a)) =>
String -> m ()
key = LegendEntry b (V a) (N a) -> m ()
forall a b (m :: * -> *).
(HasPlotOptions Identity a b, MonadState a m) =>
LegendEntry b (V a) (N a) -> m ()
addLegendEntry (LegendEntry b (V a) (N a) -> m ())
-> (String -> LegendEntry b (V a) (N a)) -> String -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> LegendEntry b (V a) (N a)
forall n b (v :: * -> *). Num n => String -> LegendEntry b v n
mkLegendEntry
addLegendEntry
:: (HasPlotOptions Identity a b, MonadState a m)
=> LegendEntry b (V a) (N a)
-> m ()
addLegendEntry :: forall a b (m :: * -> *).
(HasPlotOptions Identity a b, MonadState a m) =>
LegendEntry b (V a) (N a) -> m ()
addLegendEntry LegendEntry b (V a) (N a)
l = LensLike' Identity a [LegendEntry b (V a) (N a)]
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a [LegendEntry b (V a) (N a)]
legendEntries LensLike' Identity a [LegendEntry b (V a) (N a)]
-> [LegendEntry b (V a) (N a)] -> m ()
forall s (m :: * -> *) a.
(MonadState s m, Semigroup a) =>
ASetter' s a -> a -> m ()
<>= [LegendEntry b (V a) (N a)
l]
data AxisSpec v n = AxisSpec
{ forall (v :: * -> *) n. AxisSpec v n -> v (n, n)
_specBounds :: v (n, n)
, forall (v :: * -> *) n. AxisSpec v n -> Transformation v n
_specTrans :: Transformation v n
, forall (v :: * -> *) n. AxisSpec v n -> v LogScale
_specScale :: v LogScale
, forall (v :: * -> *) n. AxisSpec v n -> ColourMap
_specColourMap :: ColourMap
}
makeLenses ''AxisSpec
type instance V (AxisSpec v n) = v
type instance N (AxisSpec v n) = n
scaleNum :: Floating n => (n, n) -> LogScale -> n -> n
scaleNum :: forall n. Floating n => (n, n) -> LogScale -> n -> n
scaleNum (n
a,n
b) LogScale
s n
x = case LogScale
s of
LogScale
LinearAxis -> n
x
LogScale
LogAxis -> n -> n -> n
forall a. Num a => a -> a -> a
subtract n
a (n -> n) -> n -> n
forall a b. (a -> b) -> a -> b
$ (n
b n -> n -> n
forall a. Fractional a => a -> a -> a
/ n -> n -> n
forall a. Floating a => a -> a -> a
logBase n
10 n
d) n -> n -> n
forall a. Num a => a -> a -> a
* (n -> n -> n
forall a. Floating a => a -> a -> a
logBase n
10 n
x)
where d :: n
d = n
b n -> n -> n
forall a. Num a => a -> a -> a
- n
a
specPoint :: (Applicative v, Additive v, Floating n) => AxisSpec v n -> Point v n -> Point v n
specPoint :: forall (v :: * -> *) n.
(Applicative v, Additive v, Floating n) =>
AxisSpec v n -> Point v n -> Point v n
specPoint (AxisSpec v (n, n)
bs Transformation v n
tr v LogScale
ss ColourMap
_) Point v n
p =
Transformation v n -> Point v n -> Point v n
forall (v :: * -> *) n.
(Additive v, Num n) =>
Transformation v n -> Point v n -> Point v n
papply Transformation v n
tr (Point v n -> Point v n) -> Point v n -> Point v n
forall a b. (a -> b) -> a -> b
$ ASetter (Point v n) (Point v n) (v n) (v n)
-> (v n -> v n) -> Point v n -> Point v n
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter (Point v n) (Point v n) (v n) (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 ((n, n) -> LogScale -> n -> n
forall n. Floating n => (n, n) -> LogScale -> n -> n
scaleNum ((n, n) -> LogScale -> n -> n)
-> v (n, n) -> v (LogScale -> n -> n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> v (n, n)
bs v (LogScale -> n -> n) -> v LogScale -> v (n -> n)
forall a b. v (a -> b) -> v a -> v b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> v LogScale
ss v (n -> n) -> v n -> v n
forall a b. v (a -> b) -> v a -> v b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>) Point v n
p
class (Typeable p, Enveloped p) => Plotable p b where
renderPlotable
:: InSpace v n p
=> AxisSpec v n
-> PlotStyle b v n
-> p
-> QDiagram b v n Any
defLegendPic
:: InSpace v n p
=> PlotStyle b v n
-> p
-> QDiagram b v n Any
defLegendPic = PlotStyle b v n -> p -> QDiagram b v n Any
forall a. Monoid a => a
mempty
instance (Typeable b, Typeable v, Metric v, Typeable n, OrderedField n)
=> Plotable (QDiagram b v n Any) b where
renderPlotable :: forall (v :: * -> *) n.
InSpace v n (QDiagram b v n Any) =>
AxisSpec v n
-> PlotStyle b v n -> QDiagram b v n Any -> QDiagram b v n Any
renderPlotable AxisSpec v n
s PlotStyle b v n
_ QDiagram b v n Any
dia = QDiagram b v n Any
dia QDiagram b v n Any
-> (QDiagram b v n Any -> QDiagram b v n Any) -> QDiagram b v n Any
forall a b. a -> (a -> b) -> b
# Transformation (V (QDiagram b v n Any)) (N (QDiagram b v n Any))
-> QDiagram b v n Any -> QDiagram b v n Any
forall t. Transformable t => Transformation (V t) (N t) -> t -> t
transform (AxisSpec v n
sAxisSpec v n
-> Getting (Transformation v n) (AxisSpec v n) (Transformation v n)
-> Transformation v n
forall s a. s -> Getting a s a -> a
^.Getting (Transformation v n) (AxisSpec v n) (Transformation v n)
forall (v :: * -> *) n (f :: * -> *).
Functor f =>
(Transformation v n -> f (Transformation v n))
-> AxisSpec v n -> f (AxisSpec v n)
specTrans)
instance (TypeableFloat n, Renderable (Path V2 n) b) => Plotable (Path V2 n) b where
renderPlotable :: forall (v :: * -> *) n.
InSpace v n (Path V2 n) =>
AxisSpec v n -> PlotStyle b v n -> Path V2 n -> QDiagram b v n Any
renderPlotable AxisSpec v n
s PlotStyle b v n
sty Path V2 n
path
= Path V2 n -> QDiagram b V2 n Any
forall n t b.
(InSpace V2 n t, ToPath t, TypeableFloat n,
Renderable (Path V2 n) b) =>
t -> QDiagram b V2 n Any
stroke Path V2 n
path
# transform (s^.specTrans)
# applyLineStyle sty
defLegendPic :: forall (v :: * -> *) n.
InSpace v n (Path V2 n) =>
PlotStyle b v n -> Path V2 n -> QDiagram b v n Any
defLegendPic PlotStyle b v n
sty Path V2 n
_
= ((n, n) -> P2 n
forall n. (n, n) -> P2 n
p2 (-n
10,n
0) P2 n -> P2 n -> QDiagram b v n Any
forall t (v :: * -> *) n.
(V t ~ v, N t ~ n, TrailLike t) =>
Point v n -> Point v n -> t
~~ (n, n) -> P2 n
forall n. (n, n) -> P2 n
p2 (n
10,n
0))
# applyLineStyle sty
class HasVisibility a where
visible :: Lens' a Bool
hidden :: Lens' a Bool
hidden = (Bool -> f Bool) -> a -> f a
forall a. HasVisibility a => Lens' a Bool
Lens' a Bool
visible ((Bool -> f Bool) -> a -> f a)
-> ((Bool -> f Bool) -> Bool -> f Bool)
-> (Bool -> f Bool)
-> a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> Bool) -> Iso' Bool Bool
forall a. (a -> a) -> Iso' a a
involuted Bool -> Bool
not
{-# INLINE hidden #-}
instance HasVisibility (PlotOptions b v n) where
visible :: Lens' (PlotOptions b v n) Bool
visible = LensLike' f (PlotOptions b v n) Bool
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Bool
plotVisible
instance HasVisibility (PlotMods b v n) where
visible :: Lens' (PlotMods b v n) Bool
visible = LensLike' f (PlotMods b v n) Bool
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Bool
plotVisible
instance HasVisibility (Plot p b) where
visible :: Lens' (Plot p b) Bool
visible = LensLike' f (Plot p b) Bool
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Bool
plotVisible
instance HasVisibility (DynamicPlot b v n) where
visible :: Lens' (DynamicPlot b v n) Bool
visible = LensLike' f (DynamicPlot b v n) Bool
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Bool
plotVisible
instance HasVisibility (StyledPlot b v n) where
visible :: Lens' (StyledPlot b v n) Bool
visible = LensLike' f (StyledPlot b v n) Bool
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Bool
plotVisible
hide :: (MonadState s m, HasVisibility a) => ASetter' s a -> m ()
hide :: forall s (m :: * -> *) a.
(MonadState s m, HasVisibility a) =>
ASetter' s a -> m ()
hide ASetter' s a
l = ASetter' s a
l ASetter' s a
-> ((Bool -> Identity Bool) -> a -> Identity a)
-> (Bool -> Identity Bool)
-> s
-> Identity s
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> Identity Bool) -> a -> Identity a
forall a. HasVisibility a => Lens' a Bool
Lens' a Bool
visible ((Bool -> Identity Bool) -> s -> Identity s) -> Bool -> m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
False
display :: (MonadState s m, HasVisibility a) => ASetter' s a -> m ()
display :: forall s (m :: * -> *) a.
(MonadState s m, HasVisibility a) =>
ASetter' s a -> m ()
display ASetter' s a
l = ASetter' s a
l ASetter' s a
-> ((Bool -> Identity Bool) -> a -> Identity a)
-> (Bool -> Identity Bool)
-> s
-> Identity s
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> Identity Bool) -> a -> Identity a
forall a. HasVisibility a => Lens' a Bool
Lens' a Bool
visible ((Bool -> Identity Bool) -> s -> Identity s) -> Bool -> m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
data PlotMods b v n
= PlotMods (PlotOptions b v n) (PlotStyle b v n -> PlotStyle b v n)
type instance V (PlotMods b v n) = v
type instance N (PlotMods b v n) = n
instance Functor f => HasPlotOptions f (PlotMods b v n) b where
plotOptions :: LensLike'
f
(PlotMods b v n)
(PlotOptions b (V (PlotMods b v n)) (N (PlotMods b v n)))
plotOptions PlotOptions b (V (PlotMods b v n)) (N (PlotMods b v n))
-> f (PlotOptions b (V (PlotMods b v n)) (N (PlotMods b v n)))
f (PlotMods PlotOptions b v n
opts PlotStyle b v n -> PlotStyle b v n
sty) = PlotOptions b (V (PlotMods b v n)) (N (PlotMods b v n))
-> f (PlotOptions b (V (PlotMods b v n)) (N (PlotMods b v n)))
f PlotOptions b v n
PlotOptions b (V (PlotMods b v n)) (N (PlotMods b v n))
opts f (PlotOptions b v n)
-> (PlotOptions b v n -> PlotMods b v n) -> f (PlotMods b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotOptions b v n
opts' -> PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
forall b (v :: * -> *) n.
PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
PlotMods PlotOptions b v n
opts' PlotStyle b v n -> PlotStyle b v n
sty
instance Settable f => HasPlotStyle f (PlotMods b v n) b where
plotStyle :: LensLike'
f
(PlotMods b v n)
(PlotStyle b (V (PlotMods b v n)) (N (PlotMods b v n)))
plotStyle = ((PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> PlotMods b v n -> f (PlotMods b v n)
forall {f :: * -> *} {b} {v :: * -> *} {n}.
Functor f =>
((PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> PlotMods b v n -> f (PlotMods b v n)
sty (((PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> PlotMods b v n -> f (PlotMods b v n))
-> ((PlotStyle b v n -> f (PlotStyle b v n))
-> (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> (PlotStyle b v n -> f (PlotStyle b v n))
-> PlotMods b v n
-> f (PlotMods b v n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotStyle b v n -> f (PlotStyle b v n))
-> (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n)
Setter
(PlotStyle b v n -> PlotStyle b v n)
(PlotStyle b v n -> PlotStyle b v n)
(PlotStyle b v n)
(PlotStyle b v n)
forall (f :: * -> *) a b. Functor f => Setter (f a) (f b) a b
mapped where
sty :: ((PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> PlotMods b v n -> f (PlotMods b v n)
sty (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n)
f (PlotMods PlotOptions b v n
opts PlotStyle b v n -> PlotStyle b v n
s) = (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n)
f PlotStyle b v n -> PlotStyle b v n
s f (PlotStyle b v n -> PlotStyle b v n)
-> ((PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n)
-> f (PlotMods b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotStyle b v n -> PlotStyle b v n
s' -> PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
forall b (v :: * -> *) n.
PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
PlotMods PlotOptions b v n
opts PlotStyle b v n -> PlotStyle b v n
s'
instance (Additive v, Num n) => Default (PlotMods b v n) where
def :: PlotMods b v n
def = PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
forall b (v :: * -> *) n.
PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
PlotMods PlotOptions b v n
forall a. Default a => a
def PlotStyle b v n -> PlotStyle b v n
forall a. a -> a
id
data Plot p b =
Plot p
(PlotOptions b (V p) (N p))
(PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
deriving Typeable
type instance V (Plot p b) = V p
type instance N (Plot p b) = N p
instance Functor f => HasPlotOptions f (Plot p b) b where
plotOptions :: LensLike'
f (Plot p b) (PlotOptions b (V (Plot p b)) (N (Plot p b)))
plotOptions PlotOptions b (V (Plot p b)) (N (Plot p b))
-> f (PlotOptions b (V (Plot p b)) (N (Plot p b)))
f (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
sty) = PlotOptions b (V (Plot p b)) (N (Plot p b))
-> f (PlotOptions b (V (Plot p b)) (N (Plot p b)))
f PlotOptions b (V p) (N p)
PlotOptions b (V (Plot p b)) (N (Plot p b))
opts f (PlotOptions b (V p) (N p))
-> (PlotOptions b (V p) (N p) -> Plot p b) -> f (Plot p b)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotOptions b (V p) (N p)
opts' -> p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b (V p) (N p)
opts' PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
sty
instance Settable f => HasPlotStyle f (Plot p b) b where
plotStyle :: LensLike' f (Plot p b) (PlotStyle b (V (Plot p b)) (N (Plot p b)))
plotStyle = ((PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)))
-> Plot p b -> f (Plot p b)
forall {f :: * -> *} {b} {p}.
Functor f =>
((PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)))
-> Plot p b -> f (Plot p b)
sty (((PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)))
-> Plot p b -> f (Plot p b))
-> ((PlotStyle b (V p) (N p) -> f (PlotStyle b (V p) (N p)))
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)))
-> (PlotStyle b (V p) (N p) -> f (PlotStyle b (V p) (N p)))
-> Plot p b
-> f (Plot p b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotStyle b (V p) (N p) -> f (PlotStyle b (V p) (N p)))
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
Setter
(PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
(PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
(PlotStyle b (V p) (N p))
(PlotStyle b (V p) (N p))
forall (f :: * -> *) a b. Functor f => Setter (f a) (f b) a b
mapped where
sty :: ((PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)))
-> Plot p b -> f (Plot p b)
sty (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
f (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s) = (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
f PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s f (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> ((PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b)
-> f (Plot p b)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s' -> p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s'
instance HasOrientation p => HasOrientation (Plot p b) where
orientation :: Lens' (Plot p b) Orientation
orientation = (p -> f p) -> Plot p b -> f (Plot p b)
forall p p' b. SameSpace p p' => Lens (Plot p b) (Plot p' b) p p'
Lens (Plot p b) (Plot p b) p p
rawPlot ((p -> f p) -> Plot p b -> f (Plot p b))
-> ((Orientation -> f Orientation) -> p -> f p)
-> (Orientation -> f Orientation)
-> Plot p b
-> f (Plot p b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Orientation -> f Orientation) -> p -> f p
forall a. HasOrientation a => Lens' a Orientation
Lens' p Orientation
orientation
mkPlot :: (Additive (V p), Num (N p)) => p -> Plot p b
mkPlot :: forall p b. (Additive (V p), Num (N p)) => p -> Plot p b
mkPlot p
p = p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b (V p) (N p)
forall a. Default a => a
def PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
forall a. a -> a
id
rawPlot :: SameSpace p p' => Lens (Plot p b) (Plot p' b) p p'
rawPlot :: forall p p' b. SameSpace p p' => Lens (Plot p b) (Plot p' b) p p'
rawPlot p -> f p'
f (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps) = p -> f p'
f p
p f p' -> (p' -> Plot p' b) -> f (Plot p' b)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \p'
p' -> p'
-> PlotOptions b (V p') (N p')
-> (PlotStyle b (V p') (N p') -> PlotStyle b (V p') (N p'))
-> Plot p' b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p'
p' PlotOptions b (V p) (N p)
PlotOptions b (V p') (N p')
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
PlotStyle b (V p') (N p') -> PlotStyle b (V p') (N p')
ps
plotMods :: Lens' (Plot p b) (PlotMods b (V p) (N p))
plotMods :: forall p b (f :: * -> *).
Functor f =>
(PlotMods b (V p) (N p) -> f (PlotMods b (V p) (N p)))
-> Plot p b -> f (Plot p b)
plotMods PlotMods b (V p) (N p) -> f (PlotMods b (V p) (N p))
f (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps) =
PlotMods b (V p) (N p) -> f (PlotMods b (V p) (N p))
f (PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> PlotMods b (V p) (N p)
forall b (v :: * -> *) n.
PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
PlotMods PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps) f (PlotMods b (V p) (N p))
-> (PlotMods b (V p) (N p) -> Plot p b) -> f (Plot p b)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \(PlotMods PlotOptions b (V p) (N p)
opts' PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps') -> p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b (V p) (N p)
opts' PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps'
data DynamicPlot b v n where
DynamicPlot :: (InSpace v n p, Plotable p b) => Plot p b -> DynamicPlot b v n
deriving Typeable
type instance V (DynamicPlot b v n) = v
type instance N (DynamicPlot b v n) = n
_DynamicPlot :: (Plotable p b, Typeable b) => Prism' (DynamicPlot b (V p) (N p)) (Plot p b)
_DynamicPlot :: forall p b.
(Plotable p b, Typeable b) =>
Prism' (DynamicPlot b (V p) (N p)) (Plot p b)
_DynamicPlot = (Plot p b -> DynamicPlot b (V p) (N p))
-> (DynamicPlot b (V p) (N p) -> Maybe (Plot p b))
-> Prism
(DynamicPlot b (V p) (N p))
(DynamicPlot b (V p) (N p))
(Plot p b)
(Plot p b)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' Plot p b -> DynamicPlot b (V p) (N p)
forall (v :: * -> *) n p b.
(InSpace v n p, Plotable p b) =>
Plot p b -> DynamicPlot b v n
DynamicPlot (\(DynamicPlot Plot p b
p) -> Plot p b -> Maybe (Plot p b)
forall a b. (Typeable a, Typeable b) => a -> Maybe b
cast Plot p b
p)
dynamicPlot :: forall p b. (Typeable p, Typeable b)
=> Traversal' (DynamicPlot b (V p) (N p)) (Plot p b)
dynamicPlot :: forall p b.
(Typeable p, Typeable b) =>
Traversal' (DynamicPlot b (V p) (N p)) (Plot p b)
dynamicPlot Plot p b -> f (Plot p b)
f d :: DynamicPlot b (V p) (N p)
d@(DynamicPlot Plot p b
p) =
case Plot p b -> Maybe (Plot p b :~: Plot p b)
forall a. Typeable a => a -> Maybe (a :~: Plot p b)
eq Plot p b
p of
Just Plot p b :~: Plot p b
Refl -> Plot p b -> f (Plot p b)
f Plot p b
Plot p b
p f (Plot p b)
-> (Plot p b -> DynamicPlot b (V p) (N p))
-> f (DynamicPlot b (V p) (N p))
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \Plot p b
p' -> Plot p b -> DynamicPlot b (V p) (N p)
forall (v :: * -> *) n p b.
(InSpace v n p, Plotable p b) =>
Plot p b -> DynamicPlot b v n
DynamicPlot Plot p b
p'
Maybe (Plot p b :~: Plot p b)
Nothing -> DynamicPlot b (V p) (N p) -> f (DynamicPlot b (V p) (N p))
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure DynamicPlot b (V p) (N p)
d
where eq :: Typeable a => a -> Maybe (a :~: Plot p b)
eq :: forall a. Typeable a => a -> Maybe (a :~: Plot p b)
eq a
_ = Maybe (a :~: Plot p b)
forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT
instance Functor f => HasPlotOptions f (DynamicPlot b v n) b where
plotOptions :: LensLike'
f
(DynamicPlot b v n)
(PlotOptions b (V (DynamicPlot b v n)) (N (DynamicPlot b v n)))
plotOptions PlotOptions b (V (DynamicPlot b v n)) (N (DynamicPlot b v n))
-> f (PlotOptions
b (V (DynamicPlot b v n)) (N (DynamicPlot b v n)))
f (DynamicPlot (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
sty)) =
PlotOptions b (V (DynamicPlot b v n)) (N (DynamicPlot b v n))
-> f (PlotOptions
b (V (DynamicPlot b v n)) (N (DynamicPlot b v n)))
f PlotOptions b (V p) (N p)
PlotOptions b (V (DynamicPlot b v n)) (N (DynamicPlot b v n))
opts f (PlotOptions b v n)
-> (PlotOptions b v n -> DynamicPlot b v n)
-> f (DynamicPlot b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotOptions b v n
opts' -> Plot p b -> DynamicPlot b v n
forall (v :: * -> *) n p b.
(InSpace v n p, Plotable p b) =>
Plot p b -> DynamicPlot b v n
DynamicPlot (p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b v n
PlotOptions b (V p) (N p)
opts' PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
sty)
instance Settable f => HasPlotStyle f (DynamicPlot b v n) b where
plotStyle :: LensLike'
f
(DynamicPlot b v n)
(PlotStyle b (V (DynamicPlot b v n)) (N (DynamicPlot b v n)))
plotStyle = ((PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> DynamicPlot b v n -> f (DynamicPlot b v n)
Setter' (DynamicPlot b v n) (PlotStyle b v n -> PlotStyle b v n)
sty (((PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> DynamicPlot b v n -> f (DynamicPlot b v n))
-> ((PlotStyle b v n -> f (PlotStyle b v n))
-> (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n))
-> (PlotStyle b v n -> f (PlotStyle b v n))
-> DynamicPlot b v n
-> f (DynamicPlot b v n)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PlotStyle b v n -> f (PlotStyle b v n))
-> (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n)
Setter
(PlotStyle b v n -> PlotStyle b v n)
(PlotStyle b v n -> PlotStyle b v n)
(PlotStyle b v n)
(PlotStyle b v n)
forall (f :: * -> *) a b. Functor f => Setter (f a) (f b) a b
mapped where
sty :: Setter' (DynamicPlot b v n) (PlotStyle b v n -> PlotStyle b v n)
sty :: Setter' (DynamicPlot b v n) (PlotStyle b v n -> PlotStyle b v n)
sty (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n)
f (DynamicPlot (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s)) = (PlotStyle b v n -> PlotStyle b v n)
-> f (PlotStyle b v n -> PlotStyle b v n)
f PlotStyle b v n -> PlotStyle b v n
PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s f (PlotStyle b v n -> PlotStyle b v n)
-> ((PlotStyle b v n -> PlotStyle b v n) -> DynamicPlot b v n)
-> f (DynamicPlot b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotStyle b v n -> PlotStyle b v n
s' -> Plot p b -> DynamicPlot b v n
forall (v :: * -> *) n p b.
(InSpace v n p, Plotable p b) =>
Plot p b -> DynamicPlot b v n
DynamicPlot (p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b v n -> PlotStyle b v n
PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
s')
dynamicPlotMods :: Lens' (DynamicPlot b v n) (PlotMods b v n)
dynamicPlotMods :: forall b (v :: * -> *) n (f :: * -> *).
Functor f =>
(PlotMods b v n -> f (PlotMods b v n))
-> DynamicPlot b v n -> f (DynamicPlot b v n)
dynamicPlotMods PlotMods b v n -> f (PlotMods b v n)
f (DynamicPlot (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps)) =
PlotMods b v n -> f (PlotMods b v n)
f (PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
forall b (v :: * -> *) n.
PlotOptions b v n
-> (PlotStyle b v n -> PlotStyle b v n) -> PlotMods b v n
PlotMods PlotOptions b v n
PlotOptions b (V p) (N p)
opts PlotStyle b v n -> PlotStyle b v n
PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps) f (PlotMods b v n)
-> (PlotMods b v n -> DynamicPlot b v n) -> f (DynamicPlot b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \(PlotMods PlotOptions b v n
opts' PlotStyle b v n -> PlotStyle b v n
ps') -> Plot p b -> DynamicPlot b v n
forall (v :: * -> *) n p b.
(InSpace v n p, Plotable p b) =>
Plot p b -> DynamicPlot b v n
DynamicPlot (p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
forall p b.
p
-> PlotOptions b (V p) (N p)
-> (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))
-> Plot p b
Plot p
p PlotOptions b v n
PlotOptions b (V p) (N p)
opts' PlotStyle b v n -> PlotStyle b v n
PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
ps')
data StyledPlot b v n where
StyledPlot
:: Plotable p b
=> p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
type instance V (StyledPlot b v n) = v
type instance N (StyledPlot b v n) = n
instance Functor f => HasPlotOptions f (StyledPlot b v n) b where
plotOptions :: LensLike'
f
(StyledPlot b v n)
(PlotOptions b (V (StyledPlot b v n)) (N (StyledPlot b v n)))
plotOptions PlotOptions b (V (StyledPlot b v n)) (N (StyledPlot b v n))
-> f (PlotOptions b (V (StyledPlot b v n)) (N (StyledPlot b v n)))
f (StyledPlot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
sty) =
PlotOptions b (V (StyledPlot b v n)) (N (StyledPlot b v n))
-> f (PlotOptions b (V (StyledPlot b v n)) (N (StyledPlot b v n)))
f PlotOptions b (V p) (N p)
PlotOptions b (V (StyledPlot b v n)) (N (StyledPlot b v n))
opts f (PlotOptions b v n)
-> (PlotOptions b v n -> StyledPlot b v n) -> f (StyledPlot b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \PlotOptions b v n
opts' -> p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
forall p b.
Plotable p b =>
p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
StyledPlot p
p PlotOptions b v n
PlotOptions b (V p) (N p)
opts' PlotStyle b (V p) (N p)
sty
instance (Metric v, OrderedField n) => Enveloped (StyledPlot b v n) where
getEnvelope :: StyledPlot b v n
-> Envelope (V (StyledPlot b v n)) (N (StyledPlot b v n))
getEnvelope (StyledPlot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
_) =
p -> Envelope (V p) (N p)
forall a. Enveloped a => a -> Envelope (V a) (N a)
getEnvelope p
p Envelope v n -> (Envelope v n -> Envelope v n) -> Envelope v n
forall a b. a -> (a -> b) -> b
& Transformation (V (Envelope v n)) (N (Envelope v n))
-> Envelope v n -> Envelope v n
forall t. Transformable t => Transformation (V t) (N t) -> t -> t
transform (PlotOptions b v n -> Transformation v n
forall b (v :: * -> *) n. PlotOptions b v n -> Transformation v n
poTransform PlotOptions b v n
PlotOptions b (V p) (N p)
opts)
instance Functor f => HasPlotStyle f (StyledPlot b v n) b where
plotStyle :: LensLike'
f
(StyledPlot b v n)
(PlotStyle b (V (StyledPlot b v n)) (N (StyledPlot b v n)))
plotStyle PlotStyle b (V (StyledPlot b v n)) (N (StyledPlot b v n))
-> f (PlotStyle b (V (StyledPlot b v n)) (N (StyledPlot b v n)))
f (StyledPlot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
sty) =
PlotStyle b (V (StyledPlot b v n)) (N (StyledPlot b v n))
-> f (PlotStyle b (V (StyledPlot b v n)) (N (StyledPlot b v n)))
f PlotStyle b (V p) (N p)
PlotStyle b (V (StyledPlot b v n)) (N (StyledPlot b v n))
sty f (PlotStyle b v n)
-> (PlotStyle b v n -> StyledPlot b v n) -> f (StyledPlot b v n)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
forall p b.
Plotable p b =>
p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
StyledPlot p
p PlotOptions b (V p) (N p)
opts
styledPlot :: forall p b. Typeable p => Traversal' (StyledPlot b (V p) (N p)) p
styledPlot :: forall p b. Typeable p => Traversal' (StyledPlot b (V p) (N p)) p
styledPlot p -> f p
f s :: StyledPlot b (V p) (N p)
s@(StyledPlot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
sty) =
case p -> Maybe (p :~: p)
forall a. Typeable a => a -> Maybe (a :~: p)
eq p
p of
Just p :~: p
Refl -> p -> f p
f p
p
p f p
-> (p -> StyledPlot b (V p) (N p)) -> f (StyledPlot b (V p) (N p))
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \p
p' -> p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
forall p b.
Plotable p b =>
p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
StyledPlot p
p' PlotOptions b (V p) (N p)
PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
PlotStyle b (V p) (N p)
sty
Maybe (p :~: p)
Nothing -> StyledPlot b (V p) (N p) -> f (StyledPlot b (V p) (N p))
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure StyledPlot b (V p) (N p)
StyledPlot b (V p) (N p)
s
where eq :: Typeable a => a -> Maybe (a :~: p)
eq :: forall a. Typeable a => a -> Maybe (a :~: p)
eq a
_ = Maybe (a :~: p)
forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT
styleDynamic :: PlotStyle b v n -> DynamicPlot b v n -> StyledPlot b v n
styleDynamic :: forall b (v :: * -> *) n.
PlotStyle b v n -> DynamicPlot b v n -> StyledPlot b v n
styleDynamic PlotStyle b v n
sty (DynamicPlot (Plot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
styF)) = p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
forall p b.
Plotable p b =>
p
-> PlotOptions b (V p) (N p)
-> PlotStyle b (V p) (N p)
-> StyledPlot b (V p) (N p)
StyledPlot p
p PlotOptions b (V p) (N p)
opts (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p)
styF PlotStyle b v n
PlotStyle b (V p) (N p)
sty)
renderStyledPlot
:: TypeableFloat n
=> AxisSpec V2 n
-> StyledPlot b V2 n
-> QDiagram b V2 n Any
renderStyledPlot :: forall n b.
TypeableFloat n =>
AxisSpec V2 n -> StyledPlot b V2 n -> QDiagram b V2 n Any
renderStyledPlot AxisSpec V2 n
aSpec (StyledPlot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
sty)
= AxisSpec V2 n -> PlotStyle b V2 n -> p -> QDiagram b V2 n Any
forall p b (v :: * -> *) n.
(Plotable p b, InSpace v n p) =>
AxisSpec v n -> PlotStyle b v n -> p -> QDiagram b v n Any
forall (v :: * -> *) n.
InSpace v n p =>
AxisSpec v n -> PlotStyle b v n -> p -> QDiagram b v n Any
renderPlotable AxisSpec V2 n
aSpec PlotStyle b (V p) (N p)
PlotStyle b V2 n
sty p
p
QDiagram b V2 n Any
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
forall a b. a -> (a -> b) -> b
& Bool
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
-> QDiagram b V2 n Any
forall a. Bool -> (a -> a) -> a -> a
whenever (PlotOptions b (V p) (N p)
PlotOptions b V2 n
optsPlotOptions b V2 n
-> Getting Bool (PlotOptions b V2 n) Bool -> Bool
forall s a. s -> Getting a s a -> a
^.Getting Bool (PlotOptions b V2 n) Bool
forall a. HasVisibility a => Lens' a Bool
Lens' (PlotOptions b V2 n) Bool
hidden) QDiagram b V2 n Any -> QDiagram b V2 n Any
forall (v :: * -> *) n a m b.
(InSpace v n a, Monoid' m, Enveloped a, Traced a) =>
a -> QDiagram b v n m
phantom
QDiagram b V2 n Any
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
forall a b. a -> (a -> b) -> b
& Bool
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
-> QDiagram b V2 n Any
forall a. Bool -> (a -> a) -> a -> a
whenever (PlotOptions b (V p) (N p)
PlotOptions b V2 n
optsPlotOptions b V2 n
-> Getting Bool (PlotOptions b V2 n) Bool -> Bool
forall s a. s -> Getting a s a -> a
^.Getting Bool (PlotOptions b V2 n) Bool
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a Bool
clipPlot) (Path V2 n -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall n b.
TypeableFloat n =>
Path V2 n -> QDiagram b V2 n Any -> QDiagram b V2 n Any
clipTo (Path V2 n -> QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> Path V2 n -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall a b. (a -> b) -> a -> b
$ AxisSpec V2 n -> Path V2 n
forall n. TypeableFloat n => AxisSpec V2 n -> Path V2 n
specRect AxisSpec V2 n
aSpec)
specRect :: TypeableFloat n => AxisSpec V2 n -> Path V2 n
specRect :: forall n. TypeableFloat n => AxisSpec V2 n -> Path V2 n
specRect AxisSpec V2 n
aSpec =
n -> n -> Path V2 n
forall n t. (InSpace V2 n t, TrailLike t) => n -> n -> t
rect (n
xU n -> n -> n
forall a. Num a => a -> a -> a
- n
xL) (n
yU n -> n -> n
forall a. Num a => a -> a -> a
- n
yL)
# moveTo (mkP2 ((xU+xL)/2) ((yU+yL)/2))
# transform t
where
V2 (n
xL,n
xU) (n
yL,n
yU) = AxisSpec V2 n -> V2 (n, n)
forall (v :: * -> *) n. AxisSpec v n -> v (n, n)
_specBounds AxisSpec V2 n
aSpec
t :: Transformation V2 n
t = AxisSpec V2 n -> Transformation V2 n
forall (v :: * -> *) n. AxisSpec v n -> Transformation v n
_specTrans AxisSpec V2 n
aSpec
singleStyledPlotLegend
:: StyledPlot b v n
-> [(n, QDiagram b v n Any, String)]
singleStyledPlotLegend :: forall b (v :: * -> *) n.
StyledPlot b v n -> [(n, QDiagram b v n Any, String)]
singleStyledPlotLegend (StyledPlot p
p PlotOptions b (V p) (N p)
opts PlotStyle b (V p) (N p)
sty) =
(LegendEntry b v n -> (n, QDiagram b v n Any, String))
-> [LegendEntry b v n] -> [(n, QDiagram b v n Any, String)]
forall a b. (a -> b) -> [a] -> [b]
map LegendEntry b v n -> (n, QDiagram b v n Any, String)
mk (PlotOptions b v n
PlotOptions b (V p) (N p)
opts PlotOptions b v n
-> Getting
[LegendEntry b v n] (PlotOptions b v n) [LegendEntry b v n]
-> [LegendEntry b v n]
forall s a. s -> Getting a s a -> a
^. Getting [LegendEntry b v n] (PlotOptions b v n) [LegendEntry b v n]
LensLike'
(Const [LegendEntry b v n])
(PlotOptions b v n)
[LegendEntry b (V (PlotOptions b v n)) (N (PlotOptions b v n))]
forall (f :: * -> *) a b.
(HasPlotOptions f a b, Functor f) =>
LensLike' f a [LegendEntry b (V a) (N a)]
legendEntries)
where
mk :: LegendEntry b v n -> (n, QDiagram b v n Any, String)
mk LegendEntry b v n
entry = (LegendEntry b v n
entry LegendEntry b v n -> Getting n (LegendEntry b v n) n -> n
forall s a. s -> Getting a s a -> a
^. Getting n (LegendEntry b v n) n
forall b (v :: * -> *) n (f :: * -> *).
Functor f =>
(n -> f n) -> LegendEntry b v n -> f (LegendEntry b v n)
legendPrecedence, QDiagram b v n Any
pic, LegendEntry b v n
entry LegendEntry b v n
-> Getting String (LegendEntry b v n) String -> String
forall s a. s -> Getting a s a -> a
^. Getting String (LegendEntry b v n) String
forall b (v :: * -> *) n (f :: * -> *).
Functor f =>
(String -> f String) -> LegendEntry b v n -> f (LegendEntry b v n)
legendText)
where
pic :: QDiagram b v n Any
pic = case LegendEntry b v n -> LegendPic b v n
forall b (v :: * -> *) n. LegendEntry b v n -> LegendPic b v n
lPic LegendEntry b v n
entry of
LegendPic b v n
DefaultLegendPic -> PlotStyle b v n -> p -> QDiagram b v n Any
forall p b (v :: * -> *) n.
(Plotable p b, InSpace v n p) =>
PlotStyle b v n -> p -> QDiagram b v n Any
forall (v :: * -> *) n.
InSpace v n p =>
PlotStyle b v n -> p -> QDiagram b v n Any
defLegendPic PlotStyle b v n
PlotStyle b (V p) (N p)
sty p
p
CustomLegendPic PlotStyle b v n -> QDiagram b v n Any
f -> PlotStyle b v n -> QDiagram b v n Any
f PlotStyle b v n
PlotStyle b (V p) (N p)
sty
styledPlotLegends
:: Ord n
=> [StyledPlot b v n]
-> [(QDiagram b v n Any, String)]
styledPlotLegends :: forall n b (v :: * -> *).
Ord n =>
[StyledPlot b v n] -> [(QDiagram b v n Any, String)]
styledPlotLegends
= ((n, QDiagram b v n Any, String) -> (QDiagram b v n Any, String))
-> [(n, QDiagram b v n Any, String)]
-> [(QDiagram b v n Any, String)]
forall a b. (a -> b) -> [a] -> [b]
map (\(n
_,QDiagram b v n Any
p,String
t) -> (QDiagram b v n Any
p,String
t))
([(n, QDiagram b v n Any, String)]
-> [(QDiagram b v n Any, String)])
-> ([StyledPlot b v n] -> [(n, QDiagram b v n Any, String)])
-> [StyledPlot b v n]
-> [(QDiagram b v n Any, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((n, QDiagram b v n Any, String) -> n)
-> [(n, QDiagram b v n Any, String)]
-> [(n, QDiagram b v n Any, String)]
forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn (Getting n (n, QDiagram b v n Any, String) n
-> (n, QDiagram b v n Any, String) -> n
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting n (n, QDiagram b v n Any, String) n
forall s t a b. Field1 s t a b => Lens s t a b
Lens
(n, QDiagram b v n Any, String) (n, QDiagram b v n Any, String) n n
_1)
([(n, QDiagram b v n Any, String)]
-> [(n, QDiagram b v n Any, String)])
-> ([StyledPlot b v n] -> [(n, QDiagram b v n Any, String)])
-> [StyledPlot b v n]
-> [(n, QDiagram b v n Any, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StyledPlot b v n -> [(n, QDiagram b v n Any, String)])
-> [StyledPlot b v n] -> [(n, QDiagram b v n Any, String)]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap StyledPlot b v n -> [(n, QDiagram b v n Any, String)]
forall b (v :: * -> *) n.
StyledPlot b v n -> [(n, QDiagram b v n Any, String)]
singleStyledPlotLegend
sortOn :: Ord b => (a -> b) -> [a] -> [a]
sortOn :: forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn a -> b
f =
((b, a) -> a) -> [(b, a)] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (b, a) -> a
forall a b. (a, b) -> b
snd ([(b, a)] -> [a]) -> ([a] -> [(b, a)]) -> [a] -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((b, a) -> (b, a) -> Ordering) -> [(b, a)] -> [(b, a)]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (((b, a) -> b) -> (b, a) -> (b, a) -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (b, a) -> b
forall a b. (a, b) -> a
fst) ([(b, a)] -> [(b, a)]) -> ([a] -> [(b, a)]) -> [a] -> [(b, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> (b, a)) -> [a] -> [(b, a)]
forall a b. (a -> b) -> [a] -> [b]
map (\a
x -> let y :: b
y = a -> b
f a
x in b
y b -> (b, a) -> (b, a)
forall a b. a -> b -> b
`seq` (b
y, a
x))