packages feed

transformers-eff 0.1.0.0 → 0.2.0.0

raw patch · 5 files changed

+56/−20 lines, 5 filesdep +list-transformerdep ~basedep ~freedep ~mmorphPVP ok

version bump matches the API change (PVP)

Dependencies added: list-transformer

Dependency ranges changed: base, free, mmorph, transformers

API changes (from Hackage documentation)

+ Control.Effect: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Effect.Eff effect m)
+ Control.Effect.Nondeterminism: runNondeterminismM :: (Monad m, Foldable f) => (b -> a -> m b) -> m b -> Eff f m a -> m b
- Control.Effect.Nondeterminism: choose :: Nondeterministic m => [a] -> m a
+ Control.Effect.Nondeterminism: choose :: (Nondeterministic m, Foldable f) => f a -> m a
- Control.Effect.Nondeterminism: runNondeterminism :: Monad m => Eff [] m a -> m [a]
+ Control.Effect.Nondeterminism: runNondeterminism :: (Monad m, Foldable f) => (b -> a -> b) -> b -> Eff f m a -> m b
- Control.Effect.State: gets :: (Interprets (State state) m) => (state -> state) -> m state
+ Control.Effect.State: gets :: (Interprets (State state) m) => (state -> a) -> m a

Files

+ ChangeLog.md view
@@ -0,0 +1,23 @@+# Revision history for transformers-eff++## 0.2.0.0  -- 2017-02-07++### Breaking Changes++* The type of `gets` was changed to actually be the `gets` operation.+* `Control.Effect.Nondeterminism` now uses `list-transformer` instead of lists.+* `Control.Effect.Nondeterminism.choose` now chooses from any `Foldable` +  structure.++### Non-breaking Changes++* A `MonadIO` instance was added to `Eff`.+* New function: `Control.Effect.Nondeterminism.runNondeterminismM`.++### Other changes++* The upper bound of `base` was increased.++## 0.1.0.0  -- 2017-02-02++* First version. Released on an unsuspecting world. Mwahaha.
Control/Effect.hs view
@@ -1,15 +1,22 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TypeFamilies #-} +#if __GLASGOW_HASKELL__ >=800+{-# LANGUAGE UndecidableSuperClasses #-}+#endif+ module Control.Effect        ( -- * Core API          Eff(..), translate, Interprets, interpret, IsEff) where  import Control.Monad+import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Morph+import Control.Monad.Trans.Class(MonadTrans(lift)) import Control.Monad.Trans.Cont (ContT(..)) import Data.Functor.Sum import GHC.Exts (Constraint)@@ -87,6 +94,10 @@ instance MonadTrans (Eff f) where   lift m = Eff (\l -> l (InR m))   {-# INLINE lift #-}++instance MonadIO m => MonadIO (Eff effect m) where+  liftIO = lift . liftIO+  {-# INLINE liftIO #-}  {- 
Control/Effect/Nondeterminism.hs view
@@ -5,12 +5,9 @@  import Control.Monad (join) import Control.Monad.Trans.Class (lift)-import Control.Monad.Trans.Cont (shiftT) import Control.Effect-import qualified Pipes as P-import qualified Pipes.Prelude as P---- TODO Can probably generalize over any foldable.+import Data.Foldable (Foldable, toList)+import List.Transformer (fold, foldM, select)  class Monad m => Nondeterministic m where   liftNondeterminism :: [a] -> m a@@ -23,17 +20,17 @@   liftNondeterminism = lift . liftNondeterminism   {-# INLINE liftNondeterminism #-} -choose :: Nondeterministic m => [a] -> m a-choose = liftNondeterminism+choose :: (Nondeterministic m, Foldable f) => f a -> m a+choose = liftNondeterminism . toList {-# INLINE choose #-} -runNondeterminism :: Monad m => Eff [] m a -> m [a]-runNondeterminism eff = P.toListM (P.enumerate (translate makeChoice eff))-  where makeChoice choices =-          shiftT (\k ->-                    lift (P.Select (P.for (P.each choices)-                                          (P.enumerate . k))))+runNondeterminism :: (Monad m, Foldable f) => (b -> a -> b) -> b -> Eff f m a -> m b+runNondeterminism f z = fold f z id . translate (lift . select) {-# INLINE runNondeterminism #-}++runNondeterminismM :: (Monad m, Foldable f) => (b -> a -> m b) -> m b -> Eff f m a -> m b+runNondeterminismM f z = foldM f z return . translate (lift . select)+{-# INLINE runNondeterminismM #-}  -- TODO Non-conflicting names? 
Control/Effect/State.hs view
@@ -37,6 +37,6 @@ modify' f = interpret (State.modify' f) {-# INLINE modify' #-} -gets :: (Interprets (State state) m) => (state -> state) -> m state+gets :: (Interprets (State state) m) => (state -> a) -> m a gets f = interpret (State.gets f) {-# INLINE gets #-}
transformers-eff.cabal view
@@ -1,23 +1,28 @@ name:                transformers-eff synopsis:            An approach to managing composable effects, ala mtl/transformers/extensible-effects/Eff-version:             0.1.0.0+version:             0.2.0.0 homepage:            https://github.com/ocharles/transformers-eff license:             BSD3 license-file:        LICENSE author:              Ollie Charles maintainer:          ollie@ocharles.org.uk--- copyright:           +-- copyright: category:            Control build-type:          Simple--- extra-source-files:  +extra-source-files:+  ChangeLog.md cabal-version:       >=1.10  library   exposed-modules:     Control.Effect, Control.Effect.Environment, Control.Effect.Nondeterminism, Control.Effect.Exception, Control.Effect.IO, Control.Effect.State, Control.Effect.Identity-  -- other-modules:       +  -- other-modules:   other-extensions:    TypeOperators, DeriveDataTypeable, DefaultSignatures, DeriveFunctor, StandaloneDeriving, ExistentialQuantification, FlexibleContexts, FlexibleInstances, FunctionalDependencies, KindSignatures, RankNTypes, UndecidableInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving-  build-depends:       base >=4.8 && <4.9, transformers >=0.4 && <0.5, pipes, free, mmorph-  -- hs-source-dirs:      +  build-depends:       base >=4.8 && <5+                     , transformers >=0.4 && <0.6+                     , list-transformer >= 1.0.1 && < 1.1+                     , free >= 4.12.4 && < 4.13+                     , mmorph >= 1.0.9 && < 1.1+  -- hs-source-dirs:   default-language:    Haskell2010   ghc-options: -Wall