| ▲ | endgame 2 hours ago | |
This paper is up to Oleg's usual high standard, and is a very important step to read if you're catching up on the history of effect systems in Haskell. As a user, I think effect libraries in Haskell trade off between five main constraints: * Typelevel wizardry * Boilerplate * Performance * Ability to handle "higher-order" effects (e.g., `bracket`) * Safety (e.g., not accidentally leaking effects beyond their scope) The most compelling libraries I've seen from the industrial perspective are the "IO-wrapper" libraries like `cleff`, `effectful`, and `bluefin`. These libraries tend to give good performance, can handle higher-order effects, but trade off a little safety to get the typelevel stuff down a bit. Of these, I currently favour `effectful` but am keeping an eye on `bluefin` (which is very close to `effectful` but with explicit handle-passing). The explicit handle-passing in `bluefin` seems to get the typelevel down a bit more in exchange for asking the user to write a little more boilerplate to explicitly pass handles around. | ||