module Data.Geo.Route.Copyright( Copyright , mkCopyright , mkCopyright' , copyrightAuthor , copyrightYear , copyrightLicense , HasCopyright(..) , HasMaybeCopyright(..) ) where import Prelude(Show) import Control.Lens(Lens', lens) import Data.Eq(Eq) import Data.Foldable(Foldable(foldMap)) import Data.Function(id) import Data.Geo.Route.Gpx(Gpx(gpx)) import Data.List((++)) import Data.Maybe(Maybe(Just, Nothing)) import Data.Ord(Ord) import Data.String(String) import Text.Printf(printf) data Copyright = Copyright String -- author (Maybe String) -- year (Maybe String) -- license deriving (Eq, Ord, Show) mkCopyright :: String -> Copyright mkCopyright a = Copyright a Nothing Nothing mkCopyright' :: String -> String -> String -> Copyright mkCopyright' a y l = Copyright a (Just y) (Just l) copyrightAuthor :: Lens' Copyright String copyrightAuthor = lens (\(Copyright a _ _) -> a) (\(Copyright _ y l) a -> Copyright a y l) copyrightYear :: Lens' Copyright (Maybe String) copyrightYear = lens (\(Copyright _ y _) -> y) (\(Copyright a _ l) y -> Copyright a y l) copyrightLicense :: Lens' Copyright (Maybe String) copyrightLicense = lens (\(Copyright _ _ l) -> l) (\(Copyright a y _) l -> Copyright a y l) instance Gpx Copyright where gpx (Copyright a y l) = printf "%s%s" a (foldMap (\y' -> "" ++ y' ++ "") y) (foldMap (\l' -> "" ++ l' ++ "") l) class HasCopyright t where copyright :: Lens' t Copyright instance HasCopyright Copyright where copyright = id class HasMaybeCopyright t where mcopyright :: Lens' t (Maybe Copyright)