module Data.Geo.Route.Name( Name , HasName(..) , HasNames(..) , nameIso , (<.>) ) where import Prelude(Show) import Data.Eq(Eq) import Data.Function(id) import Data.Ord(Ord) import Data.List((++)) import Data.String(String, IsString(..)) import Control.Lens(Lens', Traversal', Iso', iso, set) import Data.Geo.Route.Gpx(Gpx(gpx)) newtype Name = Name String deriving (Eq, Ord, Show) nameIso :: Iso' String Name nameIso = iso Name (\(Name s) -> s) class HasName t where name :: Lens' t Name instance HasName Name where name = id class HasNames t where names :: Traversal' t Name instance HasNames Name where names = id instance IsString Name where fromString = Name instance Gpx Name where gpx (Name n) = "" ++ n ++ "" (<.>) :: HasNames t => Name -> t -> t (<.>) = set names infixr 5 <.>