diff --git a/src/Control/Category/FreeEffect.hs b/src/Control/Category/FreeEffect.hs index c2cee0d..ce9f4fc 100644 --- a/src/Control/Category/FreeEffect.hs +++ b/src/Control/Category/FreeEffect.hs @@ -12,6 +12,7 @@ module Control.Category.FreeEffect , EffCat (..) , liftEffect , foldNatEffCat + , runEffCat , liftKleisli ) where @@ -89,6 +90,15 @@ foldNatEffCat -> c a b foldNatEffCat nat = foldNatFree2 (foldNatFree2 nat) +-- | Join all effects in a free effectful category 'EffCat'. +-- +runEffCat + :: Monad m + => EffCat m c a b + -> m (c a b) +runEffCat (Base f) = return f +runEffCat (Effect mf) = runEffCat =<< mf + -- | Functor from @(->)@ category to @'Kleisli' m@. If @m@ is 'Identity' then -- it will respect 'effect' i.e. -- @'liftKleisli' ('effect' ar) = 'effect' ('liftKleisli' \<$\> ar)@.