-- | Values with a @member@ accessor that is a list of @Member@.
module Data.Geo.OSM.Accessor.Members where

import Data.Geo.OSM.Member
import Data.Geo.OSM.Accessor.Accessor

class Members a where
  members :: a -> [Member]
  setMembers :: [Member] -> a -> a

  setMember :: Member -> a -> a
  setMember = setMembers . return

  usingMembers :: ([Member] -> [Member]) -> a -> a
  usingMembers = members `using` setMembers

  usingMember :: (Member -> Member) -> a -> a
  usingMember = usingMembers . map