{-# LANGUAGE MultiParamTypeClasses, TypeFamilies, FlexibleContexts #-} module Control.Effects.Set where import Control.Effects import qualified Data.Set as Set choose :: (c ~ ContT (Set.Set r) m, AutoLift c n, Monad m, Ord r) => Proxy c -> [a] -> n a choose p as = operation p $ \k -> do sets <- mapM k as return $ Set.unions sets set :: (Monad m, Ord a) => Handler (Set.Set a) m a (Set.Set a) set = Handler { ret = return . Set.singleton , fin = return }