-- | Module for types associated with generating maps. Includes lenses. module GIS.Graphics.Types ( Map (..) , projection , title , labelEntities , labelledDistricts ) where import Control.Lens import Data.Default import GIS.Types -- | Data type for a map data Map = Map { _projection :: Projection , _title :: String , _labelEntities :: Bool -- whether to label districts , _labelledDistricts :: [([Polygon], String)] -- the data we actually want to map } projection :: Lens' Map Projection projection f s = fmap (\x -> s { _projection = x }) (f (_projection s)) title :: Lens' Map String title f s = fmap (\x -> s { _title = x }) (f (_title s)) labelEntities :: Lens' Map Bool labelEntities f s = fmap (\x -> s { _labelEntities = x }) (f (_labelEntities s)) labelledDistricts :: Lens' Map [([Polygon], String)] labelledDistricts f s = fmap (\x -> s { _labelledDistricts = x }) (f (_labelledDistricts s)) instance Default Map where def = Map { _projection = id , _title = mempty , _labelEntities = False , _labelledDistricts = mempty }