- Support GHC 9.6
- Slightly modified the signatures of the various
Scoped
interpreters.
- 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.
- 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.
- 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.
- Support GHC 9.2.1
- Added interpreters for
AtomicState
that run in terms ofState
. - Removed
MemberWithError
- Removed
DefiningModule
- 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.
- Deprecate
traceToIO
and replace it withtraceToStdout
andtraceToStderr
- Support GHC 9.0.1
- Added the combinator
insertAt
, which allows adding effects at a specified index into the effect stack - Added
Semigroup
andMonoid
forSem
- Dropped support for GHC 8.4
- Added
InterpretersFor
as a shorthand for interpreters consuming multiple effects - Added
runTSimple
andbindTSimple
, which are simplified variants ofrunT
andbindT
- Added
Polysemy.Async.cancel
to allow cancellingAsync
action (possible name collision) (#321, thanks to @aidangilmore)
- 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)
- 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)
- 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.
- Polysemy now works on GHC 8.8.1 (thanks to @googleson78 and @sevanspowell)
- Exported
MemberWithError
fromPolysemy
- Added
rewrite
andtransform
interpretation combinators
- 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)
- Added
InterpreterFor
(thanks to @bolt12) - Bumped bounds for first-class-families
- 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.
- 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
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
- 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)
- 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)
- 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)
- 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
- Fixed haddock generation
- Changed the type of
runBatchOutput
to be more useful (thanks to @Infinisil)
- 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)
- New combinators for
Polysemy.Error
:fromEither
andfromEitherM
- Fixed a bug where
intercept
andinterceptH
wouldn't correctly handle higher-order effects
- Removed the internal
Effect
machinery
- 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.
- 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
- Renamed
runResource
torunResourceInIO
- Added
runResource
, which runs aResource
purely - Added
onException
,finally
andbracketOnError
toResource
- Added a new function,
runResource
which performs bracketing for pure code
- Fixed a type error in the benchmark caused by deprecation of
Semantic
- Removed all deprecated names
- Moved
Random
effect topolysemy-zoo
makeSem
can now be used to create term-level operators (thanks to @TheMatten)
- 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
- Fixed a bug in the
Alternative
instance forSem
, where it would choose the last success instead of the first - Added
MonadPlus
andMonadFail
instances forSem
- Lower precedence of
.@
and.@@
to 8, from 9
- 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
- Give explicit package bounds for dependencies
- Haddock improvements
- Remove
Typeable
machinery fromPolysemy.Internal.Union
(thanks to @googleson78)
runInputAsReader
,runTraceAsOutput
andrunOutputAsWriter
have more generalized types- Added
runStateInIO
- Added
runOutputAsTrace
- Added
Members
(thanks to @TheMatten)
- Added
runIO
interpretation (thanks to @adamConnerSax) - Minor documentation fixes
- Initial release