Bluefin is an effect system for Haskell which allows you, through value-level handles, to freely mix a variety of effects including
Bluefin.EarlyReturn
, for early returnBluefin.Exception
, for exceptionsBluefin.IO
, for I/OBluefin.State
, for mutable stateBluefin.Stream
, for streams
For an introduction to Bluefin, see the docs in the
Bluefin
module.
There is an bluefin-examples
package which you can see in this
repository at
bluefin-examples/src/Bluefin/Examples
.
If you have a question about Bluefin, you think you might have found a bug, you're stuck on something, or you want to make contact for any other reason then either open an issue or start a discussion, whichever you prefer.
If you would like to add a new function to Bluefin, please prefer to
add it to the bluefin-contrib
package, where all user contributions
will be accepted by default. If you think a function in
bluefin-contrib
deserves to be exported from bluefin
itself,
please open an issue.
Tom Ellis would like to thank many individuals for their work related to effect systems. Without the work of these individuals, Bluefin would not exist.
-
Oleg Kiselyov, particularly for his work on effects and delimited continuations
-
Michael Snoyman, particularly for his work on conduit and the
ReaderT
IO
pattern -
Gabriella Gonzalez, particularly for her work on pipes
-
Alexis King, particularly for her work on effect systems and delimited continuations
-
David Feuer, particularly for his observation about handlers and rank-2 types
-
Andrzej Rybczak for his work on effectful
-
Francois Pottier for "Wandering through linear types, capabilities, and regions"
-
Jasper van de Jeugt, particularly for promoting the handle pattern
-
Michael Thompson, for his work on
streaming
-
Ningning Xie and Daan Leijen, for their work on Koka
-
Andrej Bauer and Matija Pretnar, for their work on Eff
-
Sjoerd Visscher, for his work on
effects