
module Data.MySet (

    deleteM, insertM, replaceM,

    module Data.Set
    )where


import Prelude hiding (null)
import Data.Set
import Control.Monad
import Data.Maybe


deleteM :: (Ord a) => a -> Maybe (Set a) -> Maybe (Set a)
deleteM r rs =
    liftM (delete r) rs >>=  \rs' ->
        if null rs' then Nothing else return rs'

insertM :: (Ord a) => a -> Maybe (Set a) -> Maybe (Set a)
insertM e = Just . insert e . maybe empty id

replaceM r1 r2 = (insertM r2).(deleteM r1)