repo-based-blog-0.0.1: library/Web/RBB/Util.hs
{- |
Module : Web.RBB.Util
Description : Globally used utility functions
Copyright : (c) Sebastian Witte
License : BSD3
Maintainer : woozletoff@gmail.com
Stability : experimental
-}
module Web.RBB.Util
( module ReExport
, ixSetModifyIx
) where
import Control.Applicative as ReExport
import Control.Lens as ReExport
import Control.Monad as ReExport
import Control.Monad.Base as ReExport (MonadBase)
import Data.Data as ReExport (Typeable)
import Data.Function as ReExport (on)
import Data.IxSet
import Data.IxSet as ReExport (IxSet)
import qualified Data.IxSet as IxSet
import Data.Maybe as ReExport
import Data.Monoid as ReExport
import Data.Text as ReExport (Text, pack)
import Data.Time as ReExport (UTCTime)
import Text.Blaze.Html5 as ReExport (Html)
-- | Modify the unique value indexable by @k@. If there ir no value or if there
-- are multiple values for the given index, the 'IxSet' is unmodified.
ixSetModifyIx :: (Ord a, Typeable a, IxSet.Indexable a, Typeable k)
=> k -> (a -> a) -> IxSet a -> IxSet a
ixSetModifyIx k f is = case getOne $ is @= k of
Nothing -> is
Just a -> insert (f a) $ delete a is