content: {- TooManyCells.Spatial.Types
  Gregory W. Schwartz
  
  Collects the spatial types used in the program.
  -}
  
  {-# LANGUAGE StrictData #-}
  {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  
  module TooManyCells.Spatial.Types where
  
  -- Remote
  import Control.Applicative (Alternative (..))
  import Control.Monad (Monad (..), MonadPlus (..))
  import Data.Colour.Palette.BrewerSet (Kolor)
  import qualified BirchBeer.Types as Birch
  import qualified Data.Map.Strict as Map
  import qualified Data.Text as T
  
  -- Local
  
  newtype ColorMap = ColorMap { unColorMap :: Map.Map Birch.Feature Kolor }
  newtype StartCol = StartCol { unStartCol :: T.Text }
  newtype EndCol = EndCol { unEndCol :: T.Text }
  newtype AnnoSpatMarkerFile = AnnoSpatMarkerFile { unAnnoSpatMarkerFile :: String }
  newtype AnnoSpatCommand = AnnoSpatCommand { unAnnoSpatCommand :: String }
  newtype PCFCrossFlag = PCFCrossFlag { unPCFCrossFlag :: Bool }
  newtype SkipFinishedFlag = SkipFinishedFlag { unSkipFinishedFlag :: Bool }
  newtype IncludeOthersFlag = IncludeOthersFlag { unIncludeOthersFlag :: Bool }
  newtype StateLabelsFile = StateLabelsFile { unStateLabelsFile :: String }
  newtype StateLabelMap = StateLabelMap { unStateLabelMap :: Map.Map Birch.Id Birch.Label }
  newtype LabelList a = LabelList { unLabelList :: [a] } deriving (Eq, Ord, Show, Functor, Monoid, Semigroup, Applicative, Alternative, Monad, MonadPlus)
  newtype Compare a = Compare { unCompare :: (T.Text, [a]) } deriving (Show)
  newtype VarList a = VarList { unVarList :: [a] } deriving (Show, Functor, Semigroup, Monoid, Applicative, Alternative, Monad, MonadPlus)
  
  data Range = Range { minX :: Double
                     , maxX :: Double
                     , minY :: Double
                     , maxY :: Double
                     }
  data Mark = MarkFeature Birch.Feature | MarkLabel Birch.Label deriving (Show, Read, Eq, Ord)
  data TopDistances = TopQuantile Double | TopDistance Double deriving (Show, Read)
  