sketches
A Haskell blog (by effectfully)
eff
🚧 a work in progress effect system for Haskell 🚧 (by lexi-lambda)
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
sketches
Posts with mentions or reviews of sketches.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2023-06-02.
- Hierarchical Free Monads: Mostly Pointless (2020)
-
Functional Declarative Design: A Comprehensive Methodology for Statically-Typed Functional Programming Languages
but free monads are an effect system and not an ergonomic one. I have a post on how one can do the same with constraints as with Hierarchical Free Monads, except with less boilerplate.
- Teaching GHC to Play Minesweeper
- Teaching GHC how to play Minesweeper
-
What's the modern idiomatic way to write this? / Inductive typeclasses with Nat
I have a post about pretty much exactly this problem. It has a good type families solution (no need to specify the arity of the zipping function) and an even better fundeps one.
- A custom warning hack
- Custom type equality errors
- Trouble in Paradise: Fibonacci
- Trouble in paradise: Fibonacci
- Enumerating type variables
eff
Posts with mentions or reviews of eff.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2023-06-02.
-
Functional Declarative Design: A Comprehensive Methodology for Statically-Typed Functional Programming Languages
Thirdly, composing arbitrary effects without losing state is really, really difficult. Things are fine when you limit yourself to State and Reader, sure, but once you start with nondeterminism you’ll discover it’s shockingly easy to produce behaviors that are baffling unless you’ve spent a preposterous amount of time thinking about this stuff. (I’ve been bitten in prod by silent state-dropping bugs, and rarely have I been more flummoxed.) Consider this example, which produces silent changes in the semantics of <|> depending on whether you use it inside or outside of a higher-order effect. Every single effect library (besides the still-unreleased eff) gets certain combinations of effects + nondeterminism wrong. You could make the argument that most people don’t use nondeterministic monads, but eDSLs really shine when you have access to them, as you can turn a concrete interpreter to an abstract one fairly easily.
-
Alternative looping mechanisms besides recursion and iteration
I'm not a LISPer myself, but I've heard that each LISPer would have his/her own fundamentals that not composed to a common base to date. I wonder even though delimited continuations (as well as other devices leveraging the powerful S-expression) are composable, the semantics to be conveyed does not generally compose (so well). This feeling partially comes from Alexis King's eff documentary about effect semantics zoo, involving other Monad based effect libs.
-
Monads doesn't compose (well), why ?
It's actually the effect semantics doesn't compose (well), and you happen trying that via Monads. Check out: https://github.com/lexi-lambda/eff/blob/master/notes/semantics-zoo.md
- The Effect Semantics Zoo
- The effect system semantics zoo
What are some alternatives?
When comparing sketches and eff you can also consider the following projects:
unliftio - The MonadUnliftIO typeclass for unlifting monads to IO
polysemy - :gemini: higher-order, no-boilerplate monads
functional-declarative-design-methodology - Article: Functional Declarative Design