mirror of
https://github.com/polysemy-research/polysemy.git
synced 2024-11-25 23:05:02 +03:00
15 KiB
15 KiB
Changelog for polysemy
Unreleased
1.9.1.0 (2023-04-09)
Other Changes
- Support GHC 9.6
Breaking Changes
Other Changes
1.9.0.0 (2022-12-28)
Breaking Changes
- Slightly modified the signatures of the various
Scoped
interpreters.
Other Changes
- Added
runScopedNew
, a simple but powerfulScoped
interpreter.runScopedNew
can be considered a sneak-peek of the future ofScoped
, which will eventually receive a major API rework to make it both simpler and more expressive. - Fixed a bug in various
Scoped
interpreters where ascoped
usage of an effect always relied on the nearest enclosing use ofscoped
from the sameScoped
effect, rather than thescoped
which handles the effect. - Added
Polysemy.Opaque
, a module for theOpaque
effect newtype, meant as a tool to wrap polymorphic effect variables so they don't jam up resolution ofMember
constraints. - Expose the type alias
Scoped_
for a scoped effect without callsite parameters.
1.8.0.0 (2022-12-22)
Breaking Changes
- Removed
Polysemy.View
- Removed
Polysemy.Law
- Removed
(@)
and(@@)
fromPolysemy
- Removed
withLowerToIO
fromPolysemy
. UsewithWeavingToFinal
instead. - Removed
asyncToIO
andlowerAsync
fromPolysemy.Async
. UseasyncToIOFinal
instead. - Removed
lowerEmbedded
fromPolysemy.IO
. UseembedToMonadIO
instead. - Removed
lowerError
fromPolysemy.Error
. UseerrorToIOFinal
instead. - Removed
resourceToIO
andlowerResource
fromPolysemy.Resource
. UseresourceToIOFinal
instead. - Removed
runFixpoint
andrunFixpointM
fromPolysemy.Fixpoint
. UsefixpointToFinal
instead. - Changed semantics of
errorToIOFinal
so that it no longer catches errors from other handlers of the same type. - The semantics of
runScoped
has been changed so that the provided interpreter is now used only once per use ofscoped
, instead of each individual action.
Other Changes
- Exposed
send
fromPolysemy
. - Dramatically improved build performance of projects when compiling with
-O2
. - Removed the debug
dump-core
flag. - Introduced the new meta-effect
Scoped
, which allows running an interpreter locally whose implementation is deferred to a later stage. - Fixed a bug in various
Scoped
interpreters where any explicit recursive interpretation of higher-order computations that the handler may perform are ignored by the interpreter, and the original handler was reused instead.
1.7.1.0 (2021-11-23)
Other Changes
- Support GHC 9.2.1
1.7.0.0 (2021-11-16)
Breaking Changes
- Added interpreters for
AtomicState
that run in terms ofState
. - 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 withtraceToStdout
andtraceToStderr
- 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
andMonoid
forSem
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
andbindTSimple
, which are simplified variants ofrunT
andbindT
1.4.0.0 (2020-10-31)
Breaking Changes
- Added
Polysemy.Async.cancel
to allow cancellingAsync
action (possible name collision) (#321, thanks to @aidangilmore)
Other Changes
- Added
Polysemy.Input.inputs
to mirrorPolysemy.Reader.asks
(#327, thanks to @expipiplus1) - Added
Polysemy.Resource.bracket_
(#335, thanks to @expipiplus1) - Support GHC 8.10.x (#337, #382)
- Restrict the existentially quantified monad in a
Weaving
toSem r
(#333, thanks to @A1kmm) - Added
raise2Under
andraise3Under
(#369) - Added
Raise
andSubsume
(#370) - Fixed memory leaks in
Applicative (Sem r)
methods (#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) - 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, anInput
-like effect for caching an expensive computation. - Added
fromException
/Via
andfromExceptionSem
/Via
- Added
note
- Added
catchJust
,try
andtryJust
(thanks to @bolt12) - Using
listen
withrunWriterTVar
orwriterToIO
will no longer delay writing until thelisten
completes. - Added
runStateSTRef
andstateToST
(thanks to @incertia) - Added
execState
andexecLazyState
(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
fromPolysemy
- Added
rewrite
andtransform
interpretation combinators
1.2.2.0 (2019-10-22)
- Fixed a bug in
resourceToIO
andresourceToIOFinal
that prevented the finalizers from being called inBracketOnError
when the computation failed due to aSem
failure - Added
atomicGets
(thanks to @googleson78) - Added
sequenceConcurrently
toPolysemy.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
andrunFixpointM
have been deprecated in favor offixpointToFinal
.- 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
, andatomicState'
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 withFinal
- Added
asyncToIOFinal
, a better alternative oflowerAsync
- Added
errorToIOFinal
, a better alternative oflowerError
- Added
fixpointToFinal
, a better alternative ofrunFixpoint
andrunFixpointM
- Added
resourceToIOFinal
, a better alternative oflowerResource
- Added
outputToIOMonoid
andoutputToIOMonoidAssocR
- Added
stateToIO
- Added
atomicStateToIO
- Added
runWriterTVar
,writerToIOFinal
, andwriterToIOAssocRFinal
- Added
writerToEndoWriter
- Added
subsume
operation - Exposed
raiseUnder
/2
/3
inPolysemy
1.1.0.0 (2019-08-15)
Breaking Changes
MonadFail
is now implemented in terms ofFail
, instead ofNonDet
(thanks to @KingoftheHomeless)LastMember
has been removed.withLowerToIO
and all interpreters that make use of it now only requiresMember (Embed IO) r
(thanks to @KingoftheHomeless)State
andWriter
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 ofmodify
(thanks to @KingoftheHomeless) - Added right-associative variants of
runOutputMonoid
andrunWriter
(thanks to @KingoftheHomeless) - Added
runOutputMonoidIORef
andrunOutputMonoidTVar
(thanks to @KingoftheHomeless) - Improved
Fixpoint
so it won't always diverge (thanks to @KingoftheHomeless) makeSem
will now complain ifDataKinds
isn't enabled (thanks to @pepegar)
1.0.0.0 (2019-07-24)
Breaking Changes
- Renamed
Lift
toEmbed
(thanks to @googleson78) - Renamed
runAsyncInIO
tolowerAsync
- Renamed
runAsync
toasyncToIO
- Renamed
runBatchOutput
torunOutputBatched
- Renamed
runConstInput
torunInputConst
- Renamed
runEmbed
torunEmbedded
(thanks to @googleson78) - Renamed
runEmbedded
tolowerEmbedded
- Renamed
runErrorAsAnother
tomapError
- Renamed
runErrorInIO
tolowerError
- Renamed
runFoldMapOutput
torunOutputMonoid
- Renamed
runIO
toembedToMonadIO
- Renamed
runIgnoringOutput
toignoreOutput
- Renamed
runIgnoringTrace
toignoreTrace
- Renamed
runInputAsReader
toinputToReader
- Renamed
runListInput
torunInputList
- Renamed
runMonadicInput
torunInputSem
- Renamed
runOutputAsList
torunOutputList
- Renamed
runOutputAsTrace
tooutputToTrace
- Renamed
runOutputAsWriter
tooutputToWriter
- Renamed
runResourceBase
toresourceToIO
- Renamed
runResourceInIO
tolowerResource
- Renamed
runStateInIORef
torunStateIORef
- Renamed
runTraceAsList
torunTraceList
- Renamed
runTraceAsOutput
totraceToOutput
- Renamed
runTraceIO
totraceToIO
- Renamed
sendM
toembed
(thanks to @googleson78) - The
NonDet
effect is now higher-order (thanks to @KingoftheHomeless)
Other Changes
- Added
evalState
andevalLazyState
- 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 toWriter
(thanks to @KingoftheHomeless) - Fixed a bug in
runWriter
where the MTL semantics wouldn't be respected (thanks to @KingoftheHomeless) - Removed the
Censor
constructor ofWriter
(thanks to @KingoftheHomeless) - Renamed
Yo
toWeaving
- Changed the visible type applications for
asks
,gets
,runEmbedded
,fromEitherM
andrunErrorAsAnother
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
toPolysemy.IO
- Added
runOutputAsList
toPolysemy.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
andfromEitherM
0.5.0.1 (2019-06-27)
- Fixed a bug where
intercept
andinterceptH
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 lowerResource
effects without giving a lowering natural transformation - New interpretation for
Trace
:runTraceAsList
- New combinator:
withLowerToIO
, which is capable of transformingIO
-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
torunResourceInIO
Other Changes
- Added
runResource
, which runs aResource
purely - Added
onException
,finally
andbracketOnError
toResource
- 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 topolysemy-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 theTactical
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 forSem
, where it would choose the last success instead of the first - Added
MonadPlus
andMonadFail
instances forSem
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
--- thepolysemy-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 fromPolysemy.Internal.Union
(thanks to @googleson78)
0.1.2.0 (2019-04-26)
runInputAsReader
,runTraceAsOutput
andrunOutputAsWriter
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