tianbar-1.0.0.0: src/System/Tianbar/Plugin/Combined.hs
{-# LANGUAGE RankNTypes #-}
module System.Tianbar.Plugin.Combined where
import Control.Lens
import Control.Monad
import System.Tianbar.Plugin
data Combined p q = Combined p q
combined1 :: Lens' (Combined p q) p
combined1 inj (Combined p q) = flip Combined q <$> inj p
combined2 :: Lens' (Combined p q) q
combined2 inj (Combined p q) = Combined p <$> inj q
instance (Plugin p, Plugin q) => Plugin (Combined p q) where
initialize = Combined <$> initialize <*> initialize
destroy (Combined p q) = destroy p >> destroy q
handler = runWithLens combined1 handler `mplus` runWithLens combined2 handler
data EmptyPlugin = EmptyPlugin
instance Plugin EmptyPlugin where
initialize = return EmptyPlugin
handler = mzero