A History of Effect Systems
summary
Chronicle of Haskell effects from monads → transformers → MTL to ST, IORef, Polysemy and effectful, with the concrete claim that Bluefin (used at Groq) achieves encapsulation and resource safety while keeping predictable performance by carving IO into analytic pieces and marking effects as value-level capabilities (handles) instead of implicit type constraints. Bluefin abandons full non-determinism/delimited-continuation support, reimplements pipes/streams as fast functions, and interoperates with effectful ideas; the library exists, is used, and resolves many practical ergonomic and performance trade-offs.
AI-written summary · about
chapters (16)
- 0:00Introduction & framing the topic
- 1:07What are effects – and why do they matter in Haskell?
- 8:28Monads as the original answer
- 9:59Monad Transformers & stacking complexity
- 11:44MTL: the Haskell98 approach
- 16:37Alternatives: ST, IORef, ContT and effects by convention
- 22:19Non-determinism, lists & combinator effects
- 24:00The legacy of MTL and what came next
- 25:06Extensible effects & splitting concerns
- 27:34Streaming systems and functional structure
- 29:29Polysemy and closed-world reasoning
- 43:53Bluefin: a new approach to effects
- 44:23Bluefin’s goals and design trade-offs
- 45:57Fine-grained error handling in Bluefin
- 47:07Community questions & Q&A
- 1:00:44Concluding thoughts, advice & future work
related talks
01h 00mCause and Effect(s): Towards a More Programmable Haskell
44mGet started with Bluefin
01h 06mTransient: Unrestricted Algebraic and Monadic Composability
01h 04mHaskell - A Peek Inside the Ivory Tower
01h 22mHaskell for Everyday Programmers
34mPrinciples of functional programming with examples in Java and Haskell
53mVariables in Haskell
01h 09mWhy Functional Programming with Linear Types Matters
