effects 0.2.3 → 0.2.4
raw patch · 2 files changed
+13/−10 lines, 2 filesdep ~containersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: containers
API changes (from Hackage documentation)
- Control.Effects.NonDet: instance Control.Newtype.Newtype (Control.Effects.NonDet.WrappedAlt m a)
- Control.Effects.NonDet: instance GHC.Base.Monoid r => Control.Newtype.Newtype (Control.Effects.NonDet.BFS r)
+ Control.Effects.NonDet: instance (GHC.Base.Applicative m, GHC.Base.Semigroup r) => GHC.Base.Semigroup (Control.Applicative.WrappedMonad m r)
+ Control.Effects.NonDet: instance Control.Newtype.Generics.Newtype (Control.Effects.NonDet.WrappedAlt m a)
+ Control.Effects.NonDet: instance GHC.Base.Alternative f => GHC.Base.Semigroup (Control.Effects.NonDet.WrappedAlt f a)
+ Control.Effects.NonDet: instance GHC.Base.Monoid r => Control.Newtype.Generics.Newtype (Control.Effects.NonDet.BFS r)
+ Control.Effects.NonDet: instance GHC.Base.Semigroup r => GHC.Base.Semigroup (Control.Effects.NonDet.BFS r)
- Control.Effects: Base :: (m a) -> Base m a
+ Control.Effects: Base :: m a -> Base m a
Files
- effects.cabal +2/−2
- src/Control/Effects/NonDet.hs +11/−8
effects.cabal view
@@ -1,5 +1,5 @@ name: effects-version: 0.2.3+version: 0.2.4 synopsis: Computational Effects description: Control.Effects is a library for programming with effects, like in the the Eff language by@@ -25,7 +25,7 @@ Library HS-Source-Dirs: src build-depends: base >= 3 && < 5,- containers >= 0.4 && < 0.6,+ containers >= 0.4 && < 0.7, newtype-generics, void exposed-modules:
src/Control/Effects/NonDet.hs view
@@ -5,20 +5,22 @@ import qualified Data.Set as Set import Prelude hiding (foldr) import Control.Applicative-import Control.Newtype+import Control.Newtype.Generics +instance (Applicative m, Semigroup r) => Semigroup (WrappedMonad m r) where+ WrapMonad a <> WrapMonad b = WrapMonad $ liftA2 (<>) a b instance (Applicative m, Monoid r) => Monoid (WrappedMonad m r) where- mempty = WrapMonad $ pure mempty- mappend (WrapMonad a) (WrapMonad b) = WrapMonad $ liftA2 mappend a b+ mempty = WrapMonad $ pure mempty newtype WrappedAlt f a = WrapAlt (f a) instance Newtype (WrappedAlt m a) where type O (WrappedAlt m a) = m a pack = WrapAlt unpack (WrapAlt a) = a+instance Alternative f => Semigroup (WrappedAlt f a) where+ WrapAlt a <> WrapAlt b = WrapAlt $ a <|> b instance Alternative f => Monoid (WrappedAlt f a) where- mempty = WrapAlt empty- mappend (WrapAlt a) (WrapAlt b) = WrapAlt $ a <|> b+ mempty = WrapAlt empty choose :: (AutoLift r m n, Monoid r, Foldable f) => Effect r m -> f a -> n a choose p as = operation p $ \k -> ala' WrapMonad foldMap k as@@ -46,13 +48,14 @@ } newtype BFS r = BFS (Int -> Maybe r)+instance Semigroup r => Semigroup (BFS r) where+ BFS f <> BFS g = BFS $ \d -> if d == 0 then f d else f d <> g (d - 1) instance Monoid r => Monoid (BFS r) where- mempty = BFS $ \d -> if d == 0 then Just mempty else Nothing- BFS f `mappend` BFS g = BFS $ \d -> if d == 0 then f d else f d `mappend` g (d - 1)+ mempty = BFS $ \d -> if d == 0 then Just mempty else Nothing instance Monoid r => Newtype (BFS r) where type O (BFS r) = r pack r = BFS $ \d -> if d == 0 then Just r else Nothing- unpack (BFS f) = loop 0 where loop d = maybe mempty (`mappend` loop (d + 1)) (f d)+ unpack (BFS f) = loop 0 where loop d = maybe mempty (<> loop (d + 1)) (f d) bfs :: (Monad m, Monoid r) => (a -> r) -> Handler (BFS r) r m a bfs f = accumulate (pack . f)