-- | Values with a @generator@ optional string accessor.
module Data.Geo.OSM.Accessor.Generator where

import Data.Geo.OSM.Accessor.Accessor

class Generator a where
  generator :: a -> Maybe String
  setGenerator :: Maybe String -> a -> a

  setGenerator' :: String -> a -> a
  setGenerator' = setGenerator . return

  usingGenerator :: (Maybe String -> Maybe String) -> a -> a
  usingGenerator = generator `using` setGenerator

  usingGenerator' :: (String -> String) -> a -> a
  usingGenerator' = usingGenerator . fmap