-- | Values with a @visible@ boolean accessor.
module Data.Geo.OSM.Accessor.Visible where

import Data.Geo.OSM.Accessor.Accessor

class Visible a where
  visible :: a -> Bool
  setVisible :: Bool -> a -> a

  makeVisible :: a -> a
  makeVisible = setVisible True

  makeInvisible :: a -> a
  makeInvisible = setVisible False

  usingVisible :: (Bool -> Bool) -> a -> a
  usingVisible = visible `using` setVisible