{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE TemplateHaskell #-} module Plots.Name where import Control.Lens -- import Data.Map (Map) import Data.Ord (comparing) import Data.Function import Data.Typeable import Diagrams.Core.Names import Diagrams.Prelude hiding (view) data PlotName n = PlotName { _plotName :: String , _namedSize2D :: SizeSpec V2 n , _namedT2 :: T2 n } deriving Typeable makeLenses ''PlotName instance Show (PlotName n) where show pn = "Plot: " ++ view plotName pn -- equating :: Eq b => (a -> b) -> a -> a -> Bool -- equating = on (==) instance Eq (PlotName n) where (==) = on (==) (view plotName) instance Ord (PlotName n) where compare = comparing (view plotName) instance Typeable n => IsName (PlotName n) -- _AName :: IsName a => Prism' AName a -- _AName = prism' AName (\(AName a) -> cast a) -- _Names :: IsName a => Traversal' Name a -- _Names = _Wrapped' . traverse . _AName -- _NamedString :: Traversal' Name String -- _NamedString = _Names -- _NamedPlot :: Typeable n => Traversal' Name (PlotName n) -- _NamedPlot = _Names -- diaNames :: OrderedField n => QDiagram b V2 n Any -> Map Name [P2 n] -- diaNames = over (mapped . traversed) location . view (subMap . _Wrapped')