packages feed

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 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)