# Changelog for polysemy ## Unreleased ### Breaking Changes ### Other Changes ## 1.7.0.0 (2021-11-16) ### Breaking Changes * Added interpreters for `AtomicState` that run in terms of `State`. * Removed `MemberWithError` * Removed `DefiningModule` ### Other Changes * The internal `ElemOf` proof is now implemented as an unsafe integer, significantly cutting down on generated core. * Polysemy no longer emits custom type errors for ambiguous effect actions. These have long been rendered moot by `polysemy-plugin`, and the cases that they still exist are usually overeager (and wrong.) * As a result, the core produced by `polysemy` is significantly smaller. Programs should see a reduction of ~20% in terms and types, and ~60% in coercions. ## 1.6.0.0 (2021-07-12) ### Breaking Changes * Deprecate `traceToIO` and replace it with `traceToStdout` and `traceToStderr` * Support GHC 9.0.1 ### Other Changes * Added the combinator `insertAt`, which allows adding effects at a specified index into the effect stack * Added `Semigroup` and `Monoid` for `Sem` ## 1.5.0.0 (2021-03-30) ### Breaking Changes * Dropped support for GHC 8.4 ### Other Changes - Added `InterpretersFor` as a shorthand for interpreters consuming multiple effects - Added `runTSimple` and `bindTSimple`, which are simplified variants of `runT` and `bindT` ## 1.4.0.0 (2020-10-31) ### Breaking Changes - Added `Polysemy.Async.cancel` to allow cancelling `Async` action (possible name collision) ([#321](https://github.com/polysemy-research/polysemy/pull/321), thanks to @aidangilmore) ### Other Changes - Added `Polysemy.Input.inputs` to mirror `Polysemy.Reader.asks` ([#327](https://github.com/polysemy-research/polysemy/issues/327), thanks to @expipiplus1) - Added `Polysemy.Resource.bracket_` ([#335](https://github.com/polysemy-research/polysemy/pull/335), thanks to @expipiplus1) - Support GHC 8.10.x ([#337](https://github.com/polysemy-research/polysemy/pull/337), [#382](https://github.com/polysemy-research/polysemy/pull/382)) - Restrict the existentially quantified monad in a `Weaving` to `Sem r` ([#333](https://github.com/polysemy-research/polysemy/pull/333), thanks to @A1kmm) - Added `raise2Under` and `raise3Under` ([#369](https://github.com/polysemy-research/polysemy/pull/369)) - Added `Raise` and `Subsume` ([#370](https://github.com/polysemy-research/polysemy/pull/370)) - Fixed memory leaks in `Applicative (Sem r)` methods ([#372](https://github.com/polysemy-research/polysemy/pull/372), thanks to @goertzenator) - Smaller suggestions and fixes (thanks to @jeremyschlatter, @galagora and @felixonmars) ## 1.3.0.0 (2020-02-14) ### Breaking Changes - The semantics for `runNonDet` when `<|>` is used inside a higher-order action of another effect has been reverted to that of 1.1.0.0 and earlier. (See [issue #246](https://github.com/polysemy-research/polysemy/issues/246)) - Type parameters for `outputToTrace` have been rearranged (thanks to @juanpaucar) ### Other Changes - Added `Bundle` effect, for bundling multiple effects into a single one. - Added `Tagged` effect, for annotating and disambiguating identical effects. - Added `View` effect, an `Input`-like effect for caching an expensive computation. - Added `fromException`/`Via` and `fromExceptionSem`/`Via` - Added `note` - Added `catchJust`, `try` and `tryJust` (thanks to @bolt12) - Using `listen` with `runWriterTVar` or `writerToIO` will no longer delay writing until the `listen` completes. - Added `runStateSTRef` and `stateToST` (thanks to @incertia) - Added `execState` and `execLazyState` (thanks to @tjweir) - Added `Polysemy.Law`, which offers machinery for creating laws for effects. - Added `Polysemy.Membership` for retrieving and making use of effect membership proofs. ## 1.2.3.0 (2019-10-29) - Polysemy now works on GHC 8.8.1 (thanks to @googleson78 and @sevanspowell) - Exported `MemberWithError` from `Polysemy` - Added `rewrite` and `transform` interpretation combinators ## 1.2.2.0 (2019-10-22) - Fixed a bug in `resourceToIO` and `resourceToIOFinal` that prevented the finalizers from being called in `BracketOnError` when the computation failed due to a `Sem` failure - Added `atomicGets` (thanks to @googleson78) - Added `sequenceConcurrently` to `Polysemy.Async` (thanks to @spacekitteh) ## 1.2.1.0 (2019-09-15) - Added `InterpreterFor` (thanks to @bolt12) - Bumped bounds for first-class-families ## 1.2.0.0 (2019-09-04) ### Breaking Changes - All `lower-` interpreters have been deprecated, in favor of corresponding `-Final` interpreters. - `runFixpoint` and `runFixpointM` have been deprecated in favor of `fixpointToFinal`. - The semantics for `runNonDet` when `<|>` is used inside a higher-order action of another effect has been changed. - Type variables for certain internal functions, `failToEmbed`, and `atomicState'` have been rearranged. ### Other changes - Added `Final` effect, an effect for embedding higher-order actions in the final monad of the effect stack. Any interpreter should use this instead of requiring to be provided an explicit lowering function to the final monad. - Added `Strategy` environment for use together with `Final` - Added `asyncToIOFinal`, a better alternative of `lowerAsync` - Added `errorToIOFinal`, a better alternative of `lowerError` - Added `fixpointToFinal`, a better alternative of `runFixpoint` and `runFixpointM` - Added `resourceToIOFinal`, a better alternative of `lowerResource` - Added `outputToIOMonoid` and `outputToIOMonoidAssocR` - Added `stateToIO` - Added `atomicStateToIO` - Added `runWriterTVar`, `writerToIOFinal`, and `writerToIOAssocRFinal` - Added `writerToEndoWriter` - Added `subsume` operation - Exposed `raiseUnder`/`2`/`3` in `Polysemy` ## 1.1.0.0 (2019-08-15) ### Breaking Changes - `MonadFail` is now implemented in terms of `Fail`, instead of `NonDet` (thanks to @KingoftheHomeless) - `LastMember` has been removed. `withLowerToIO` and all interpreters that make use of it now only requires `Member (Embed IO) r` (thanks to @KingoftheHomeless) - `State` and `Writer` now have better strictness semantics ### Other Changes - Added `AtomicState` effect (thanks to @KingoftheHomeless) - Added `Fail` effect (thanks to @KingoftheHomeless) - Added `runOutputSem` (thanks to @cnr) - Added `modify'`, a strict variant of `modify` (thanks to @KingoftheHomeless) - Added right-associative variants of `runOutputMonoid` and `runWriter` (thanks to @KingoftheHomeless) - Added `runOutputMonoidIORef` and `runOutputMonoidTVar` (thanks to @KingoftheHomeless) - Improved `Fixpoint` so it won't always diverge (thanks to @KingoftheHomeless) - `makeSem` will now complain if `DataKinds` isn't enabled (thanks to @pepegar) ## 1.0.0.0 (2019-07-24) ### Breaking Changes - Renamed `Lift` to `Embed` (thanks to @googleson78) - Renamed `runAsyncInIO` to `lowerAsync` - Renamed `runAsync` to `asyncToIO` - Renamed `runBatchOutput` to `runOutputBatched` - Renamed `runConstInput` to `runInputConst` - Renamed `runEmbed` to `runEmbedded` (thanks to @googleson78) - Renamed `runEmbedded` to `lowerEmbedded` - Renamed `runErrorAsAnother` to `mapError` - Renamed `runErrorInIO` to `lowerError` - Renamed `runFoldMapOutput` to `runOutputMonoid` - Renamed `runIO` to `embedToMonadIO` - Renamed `runIgnoringOutput` to `ignoreOutput` - Renamed `runIgnoringTrace` to `ignoreTrace` - Renamed `runInputAsReader` to `inputToReader` - Renamed `runListInput` to `runInputList` - Renamed `runMonadicInput` to `runInputSem` - Renamed `runOutputAsList` to `runOutputList` - Renamed `runOutputAsTrace` to `outputToTrace` - Renamed `runOutputAsWriter` to `outputToWriter` - Renamed `runResourceBase` to `resourceToIO` - Renamed `runResourceInIO` to `lowerResource` - Renamed `runStateInIORef` to `runStateIORef` - Renamed `runTraceAsList` to `runTraceList` - Renamed `runTraceAsOutput` to `traceToOutput` - Renamed `runTraceIO` to `traceToIO` - Renamed `sendM` to `embed` (thanks to @googleson78) - The `NonDet` effect is now higher-order (thanks to @KingoftheHomeless) ### Other Changes - Added `evalState` and `evalLazyState` - Added `runNonDetMaybe` (thanks to @KingoftheHomeless) - Added `nonDetToError` (thanks to @KingoftheHomeless) - Haddock documentation for smart constructors generated via `makeSem` will no longer have weird variable names (thanks to @TheMatten) ## 0.7.0.0 (2019-07-08) ### Breaking Changes - Added a `Pass` constructor to `Writer` (thanks to @KingoftheHomeless) - Fixed a bug in `runWriter` where the MTL semantics wouldn't be respected (thanks to @KingoftheHomeless) - Removed the `Censor` constructor of `Writer` (thanks to @KingoftheHomeless) - Renamed `Yo` to `Weaving` - Changed the visible type applications for `asks`, `gets`, `runEmbedded`, `fromEitherM` and `runErrorAsAnother` ### Other Changes - Fixed haddock generation ## 0.6.0.0 (2019-07-04) ### Breaking Changes - Changed the type of `runBatchOutput` to be more useful (thanks to @Infinisil) ### Other Changes - **THE ERROR MESSAGES ARE SO MUCH BETTER** :party: :party: :party: - Added `runEmbedded` to `Polysemy.IO` - Added `runOutputAsList` to `Polysemy.Output` (thanks to @googleson78) - Asymptotically improved the performance of `runTraceAsList` (thanks to @googleson78) ## 0.5.1.0 (2019-06-28) - New combinators for `Polysemy.Error`: `fromEither` and `fromEitherM` ## 0.5.0.1 (2019-06-27) - Fixed a bug where `intercept` and `interceptH` wouldn't correctly handle higher-order effects ## 0.5.0.0 (2019-06-26) ### Breaking Changes - Removed the internal `Effect` machinery ### New Effects and Interpretations - New effect; `Async`, for describing asynchronous computations - New interpretation for `Resource`: `runResourceBase`, which can lower `Resource` effects without giving a lowering natural transformation - New interpretation for `Trace`: `runTraceAsList` - New combinator: `withLowerToIO`, which is capable of transforming `IO`-invariant functions as effects. ### Other Changes - Lots of hard work on the package and CI infrastructure to make it green on GHC 8.4.4 (thanks to @jkachmar) - Changed the order of the types for `runMonadicInput` to be more helpful (thanks to @tempname11) - Improved the error machinery to be more selective about when it runs - Factored out the TH into a common library for third-party consumers ## 0.4.0.0 (2019-06-12) ### Breaking Changes - Renamed `runResource` to `runResourceInIO` ### Other Changes - Added `runResource`, which runs a `Resource` purely - Added `onException`, `finally` and `bracketOnError` to `Resource` - Added a new function, `runResource` which performs bracketing for pure code ## 0.3.0.1 (2019-06-09) - Fixed a type error in the benchmark caused by deprecation of `Semantic` ## 0.3.0.0 (2019-06-01) ### Breaking Changes - Removed all deprecated names - Moved `Random` effect to `polysemy-zoo` ### Other Changes - `makeSem` can now be used to create term-level operators (thanks to @TheMatten) ## 0.2.2.0 (2019-05-30) - Added `getInspectorT` to the `Tactical` functions, which allows polysemy code to be run in external callbacks - A complete rewrite of `Polysemy.Internal.TH.Effect` (thanks to @TheMatten) - Fixed a bug in the TH generation of effects where the splices could contain usages of effects that were ambiguous ## 0.2.1.0 (2019-05-27) - Fixed a bug in the `Alternative` instance for `Sem`, where it would choose the *last* success instead of the first - Added `MonadPlus` and `MonadFail` instances for `Sem` ## 0.2.0.0 (2019-05-23) ### Breaking Changes - Lower precedence of `.@` and `.@@` to 8, from 9 ### Other Changes - Fixed a serious bug in `interpretH` and friends, where higher-order effects would always be run with the current interpreter. - Users need no longer require `inlineRecursiveCalls` --- the `polysemy-plugin-0.2.0.0` will do it automatically when compiling with `-O` - Deprecated `inlineRecursiveCalls`; slated for removal in the next version ## 0.1.2.1 (2019-05-18) - Give explicit package bounds for dependencies - Haddock improvements - Remove `Typeable` machinery from `Polysemy.Internal.Union` (thanks to @googleson78) ## 0.1.2.0 (2019-04-26) - `runInputAsReader`, `runTraceAsOutput` and `runOutputAsWriter` have more generalized types - Added `runStateInIO` - Added `runOutputAsTrace` - Added `Members` (thanks to @TheMatten) ## 0.1.1.0 (2019-04-14) - Added `runIO` interpretation (thanks to @adamConnerSax) - Minor documentation fixes ## 0.1.0.0 (2019-04-11) - Initial release