freer-simple 1.0.1.1 → 1.1.0.0
raw patch · 5 files changed
+23/−13 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.OpenUnion: instance (Data.OpenUnion.Internal.Member m effs, m ~ Data.OpenUnion.Last effs) => Data.OpenUnion.LastMember m effs
+ Control.Monad.Freer: type (~>) k (f :: k -> *) (g :: k -> *) = forall (x :: k). () => f x -> g x
+ Data.OpenUnion: instance Data.OpenUnion.LastMember m '[m]
+ Data.OpenUnion: instance Data.OpenUnion.LastMember m effs => Data.OpenUnion.LastMember m (eff : effs)
- Control.Monad.Freer: class (Member m effs, m ~ Last effs) => LastMember m effs | effs -> m
+ Control.Monad.Freer: class Member m effs => LastMember m effs | effs -> m
- Control.Monad.Freer: interpretM :: forall eff effs m. (Monad m, LastMember m effs) => (eff ~> m) -> Eff (eff : effs) ~> Eff effs
+ Control.Monad.Freer: interpretM :: forall eff m effs. (Monad m, LastMember m effs) => (eff ~> m) -> Eff (eff : effs) ~> Eff effs
- Data.OpenUnion: class (Member m effs, m ~ Last effs) => LastMember m effs | effs -> m
+ Data.OpenUnion: class Member m effs => LastMember m effs | effs -> m
Files
- CHANGELOG.md +9/−3
- README.md +4/−0
- freer-simple.cabal +2/−2
- src/Control/Monad/Freer.hs +5/−2
- src/Data/OpenUnion.hs +3/−6
CHANGELOG.md view
@@ -1,12 +1,18 @@-# 1.0.1.1+# 1.1.0.0 (February 20th, 2018) +- Changed the implementation of `LastMember` to avoid an issue similar to the one with `Member` fixed in 1.0.1.1 that could cause the constraint to unnecessarily fail to solve ([#6](https://github.com/lexi-lambda/freer-simple/issues/6)).+- Changed the order of the type variables in `interpretM` to be more consistent with other functions (only relevant in combination with `TypeApplications`).+- Re-exported `(~>)` from `Control.Natural` through `Control.Monad.Freer`.++# 1.0.1.1 (January 31st, 2018)+ - Fixed a bug that could cause `Member` constraints to erroneously fail to solve ([#3](https://github.com/lexi-lambda/freer-simple/pull/3)). -# 1.0.1.0+# 1.0.1.0 (January 27th, 2018) - Added `subsume` to `Control.Monad.Freer` for deduplicating effects. - Added `gets` to `Control.Monad.Freer.State` ([#1](https://github.com/lexi-lambda/freer-simple/pull/1)). -# 1.0.0.0+# 1.0.0.0 (December 7th, 2017) - Initial release.
README.md view
@@ -32,9 +32,13 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE DataKinds #-}+{-# LANGUAGE LambdaCase #-} module Console where import Control.Monad.Freer+import Control.Monad.Freer.Error+import Control.Monad.Freer.State+import Control.Monad.Freer.Writer import System.Exit hiding (ExitCode(ExitSuccess)) --------------------------------------------------------------------------------
freer-simple.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 510c61e88946fcfca5f48fe0358a0c8e9c9b3c89db3f9934a231ffd539702e49+-- hash: f02232dd03e2c26a1697a9b46bb32db8b1f332d4d81f5bb5c309a480589ea5d1 name: freer-simple-version: 1.0.1.1+version: 1.1.0.0 synopsis: Implementation of a friendly effect system for Haskell. description: An implementation of an effect system for Haskell (a fork of <http://hackage.haskell.org/package/freer-effects freer-effects>), which is
src/Control/Monad/Freer.hs view
@@ -84,7 +84,7 @@ @ runInMemoryFileSystem :: [('FilePath', 'String')] -> 'Eff' (FileSystem ': effs) '~>' 'Eff' effs-runInMemoryFileSystem initVfs = 'Control.Monad.Freer.State.runState' initVfs '.' fsToState where+runInMemoryFileSystem initVfs = 'Control.Monad.Freer.State.evalState' initVfs '.' fsToState where fsToState :: 'Eff' (FileSystem ': effs) '~>' 'Eff' ('Control.Monad.Freer.State.State' [('FilePath', 'String')] ': effs) fsToState = 'reinterpret' '$' \case ReadFile path -> 'Control.Monad.Freer.State.get' '>>=' \\vfs -> case 'lookup' path vfs of@@ -229,6 +229,9 @@ -- *** Advanced effect handlers , interpretWith , interposeWith++ -- * Re-exported bindings+ , type (~>) ) where import Control.Natural (type (~>))@@ -333,7 +336,7 @@ -- 'interpretM' f = 'interpret' ('sendM' . f) -- @ interpretM- :: forall eff effs m+ :: forall eff m effs . (Monad m, LastMember m effs) => (eff ~> m) -> Eff (eff ': effs) ~> Eff effs interpretM f = interpret (sendM . f)
src/Data/OpenUnion.hs view
@@ -61,10 +61,6 @@ Members (eff ': effs) effs' = (Member eff effs', Members effs effs') Members '[] effs' = () -type family Last effs where- Last (eff ': '[]) = eff- Last (_ ': effs) = Last effs- -- | Like 'Member', @'LastMember' eff effs@ is a constraint that requires that -- @eff@ is in the type-level list @effs@. However, /unlike/ 'Member', -- 'LastMember' requires @m@ be the __final__ effect in @effs@.@@ -74,5 +70,6 @@ -- in combination with 'Control.Monad.Freer.sendM' or -- 'Control.Monad.Base.liftBase' to embed ordinary monadic effects within an -- 'Control.Monad.Freer.Eff' computation.-class (Member m effs, m ~ Last effs) => LastMember m effs | effs -> m-instance (Member m effs, m ~ Last effs) => LastMember m effs+class Member m effs => LastMember m effs | effs -> m+instance {-# OVERLAPPABLE #-} LastMember m effs => LastMember m (eff ': effs)+instance LastMember m (m ': '[])