{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE Safe #-}
module Base.Mergeable (
Mergeable(..),
MergeableM(..),
) where
#if MIN_VERSION_base(4,8,0)
#else
import Data.Foldable
#endif
class Mergeable a where
mergeAny :: Foldable f => f a -> a
mergeAll :: Foldable f => f a -> a
mergeNested :: a -> a -> a
mergeNested x y = mergeAll [x,y]
mergeDefault :: a
mergeDefault = mergeAll Nothing
class (Functor m, Monad m) => MergeableM m where
mergeAnyM :: (Mergeable a, Foldable f) => f (m a) -> m a
mergeAllM :: (Mergeable a, Foldable f) => f (m a) -> m a
mergeNestedM :: Mergeable a => m a -> m a -> m a
mergeNestedM x y = mergeAllM [x,y]
mergeDefaultM :: Mergeable a => m a
mergeDefaultM = mergeAllM Nothing
instance Mergeable () where
mergeAny = const ()
mergeAll = const ()