module Data.Geo.Route.Description( Description , HasDescription(..) , HasMaybeDescription(..) , descriptionIso , (<~>) ) where import Prelude(Show) import Data.Eq(Eq) import Data.Function(id) import Data.List((++)) import Data.Maybe(Maybe) import Data.Ord(Ord) import Data.String(String, IsString(fromString)) import Control.Lens(Lens', Iso', iso, (?~)) import Data.Geo.Route.Gpx(Gpx(gpx)) newtype Description = Description String deriving (Eq, Ord, Show) descriptionIso :: Iso' String Description descriptionIso = iso Description (\(Description s) -> s) class HasDescription t where description :: Lens' t Description instance HasDescription Description where description = id class HasMaybeDescription t where mdescription :: Lens' t (Maybe Description) instance IsString Description where fromString = Description instance Gpx Description where gpx (Description d) = "" ++ d ++ "" (<~>) :: HasMaybeDescription t => Description -> t -> t (<~>) = (?~) mdescription infixr 5 <~>