See a typo? Have a suggestion? Edit this page on Github
At the end of last week, I made a number of breaking releases of libraries. The API impact of these changes was relatively minor, so most code should continue to work with little to no modification. I'm going to call out the major motivating changes for these releases below. If I leave out a package from explanations, assume the reason is just "upstream breaking changes caused breaking changes here." And of course check the relevant ChangeLogs for more details.
For completeness, the list of packages I released at the end of last week is:
Switching to MonadUnliftIO
The primary instigator for this set of releases was moving my
libraries over from
exceptions packages, respectively)
gave a talk recently
LambdaWorld about this topic, and have
Therefore, I'm not going to get into the arguments here of why I think
MonadUnliftIO is a better solution to this class of problems.
Unless I missed something, this change dropped direct dependency on
throughout all of the packages listed above. The dependency on the
exceptions package remains, but only for using the
typeclass, not the
MonadMask typeclasses. (This
does leave open a question of whether we should still define valid
rio issue #38.)
User impact: You may need to switch some usages of the
lifted-base package to
unliftio or similar, and update some type
signatures. It's possible that if you're using a monad transformer
stack which is not an instance of
MonadUnliftIO that you'll face
In previous versions of the
resourcet package, if you register a
cleanup action which throws an exception itself, the exception would
be swallowed. In this new release, any exceptions thrown during
cleanup will be rethrown by
There were some big-ish changes to conduit:
- Drop finalizers from the library,
as discussed previously. This
resulted in the removal of the
addCleanupfunctions, and the replacement of the
ResumableConduittypes with the
- Deprecated the old type synonyms and operators from the library. This has been planned for a long time.
- Moved the
conduititself. This increases the dependency footprint of conduit itself, but makes it a fully loaded streaming data library.
conduit-combinatorsis now an empty library.
Yesod: no more transformers!
The changes mentioned in
my last yesodweb.com blog post
have been carried out. The biggest impact of that is replacing
WidgetT (as transformers over
WidgetFor, as concrete monads parameterized by the site data
type. Thanks to backwards compat
synonyms, and the Template Haskell-generated
synonyms being updated automatically, hopefully most users will feel
almost no impact from this. (Authors of subsites, however, will likely
have a more significant amount of work to do.)
Yeah, this post turned out much smaller than I expected. There are likely breakages that I've forgotten about and which should be called out. I'll ask that if anyone notices particular breakages they needed to work around, to please either include a note below or send a PR to this blog post (link above) adding information on the change.