effectful
ghc-proposals
Our great sponsors
effectful | ghc-proposals | |
---|---|---|
21 | 159 | |
319 | 667 | |
6.0% | 0.3% | |
8.0 | 9.1 | |
9 days ago | 6 days ago | |
Haskell | Python | |
BSD 3-clause "New" or "Revised" License | - |
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.
effectful
-
Haskell in Production: Standard Chartered
Also a much simpler alternative in my opinion to monad transformers is effectful:
https://github.com/haskell-effectful/effectful
Here's a talk on it:
-
The "Services" design pattern
effectful got rid of all issues I listed (I expanded a little on it here).
-
effectful and polysemy users: How do you test? Any of "same as mtl", "novel ways enabled by effects", or "same but more efficiently because..."? Please share experiences
There is also a long document on Issues with the Transformer/mtl library.
-
Haskell ecosystem questions.
cats-effects -> https://github.com/haskell-effectful/effectful
-
Real world applications with tagless-final, ReaderT, and three-layers
API for basic usage is very similar, but things quickly go south once you want to use higher order effects (i.e. effects that make use of the m type parameter). A lot of things then become very hard to write due to complex types or outright impossible (this issue is a good example - a reasonable thing to do that is very straightforward to write with effectful, apparently impossible to do with polysemy).
FWIW effectful is an improvement in both departments (disclaimer: I'm the author).
-
How to Lose Functional Programming at Work
> Lets say you have a huge overly-convoluted Haskell program. Somewhere deep down a call hierachy of pure functions you need to print something to the console. That is not easy to refactor.
> Or vice-versa you have a huge convoluted program where everything happens inside an IO monad because at some point something is written to the console. Now you realize you dont need to write to the console.
These problems are essentially completely resolved these days by a modern effect system like effectful. Basically, they allow you to do arbitrary effects deep down a call stack with minimal plumbing (you still have adjust the types, as you should: that's the point of effect tracking!) and also to remove effects, so you can easily convert between pure code and "effectful code that just so happens to do no effects".
-
Effectful | Paweł Szulc | Lambda Days 2022
See also https://github.com/haskell-effectful/effectful/issues/99.
-
Monad transformer libraries
FYI, transformers and mtl have several subtle traps. You can read about them here.
- Comparing ZIO to Haskell effects libraries like Polysemy?
ghc-proposals
-
An alternative front end for Haskell?
> I think Haskell needs a way to graduate (or retire) language extensions
-
Or patterns proposal: Prefix signalling or just infix?
Additionally, while this proposal is focused on the simple implementation and so in the current proposal or patterns do not bind any variables as per #522, if we do get settled on syntax and then later wish to expand to allow binding variables as in #43, then the syntax is again clean and discoverable.
-
Amendmend proposal: Changed syntax for Or patterns
as syntax is contentious a topic as ever, David (the main proposal author) and I would like to invite you to give your input on https://github.com/ghc-proposals/ghc-proposals/pull/585, where we propose to change the syntax of the accepted proposal #522 introducing Or patterns. In particular, we'd like to know
-
{-# WARNING #-} for Data.List.{head,tail} in future GHC 9.8
It's coming: https://github.com/ghc-proposals/ghc-proposals/pull/541
Right. Being able to disable "custom type warnings" at use sites was part of an earlier proposal (https://github.com/ghc-proposals/ghc-proposals/pull/454) but it ended up being shelved.
- Foldr type level implementation
-
High-Performance Haskell?
The lack of concatMap fusion is a notorious issue in stream fusion. I recently implemented Higher Order Patterns in Rewrite Rules which should make it possible to write a rewrite rule for fusing concatMap in GHC 9.8.
-
The Haskell Playground supports GHC 9.6 alpha 2! You can now preview features like the error codes and the TypeData extension!
The initial proposal was data kind, but in the discussion some people didn't like the word "kind".
-
How does your programming language implement multi-line strings?
I learned about this when proposing multiline strings in Haskell. The convo there might be of interest to you: https://github.com/ghc-proposals/ghc-proposals/pull/569
What are some alternatives?
haskell-language-server - Official haskell ide support via language server (LSP). Successor of ghcide & haskell-ide-engine.
godot-haskell - Haskell bindings for GdNative
ihp - 🔥 The fastest way to build type safe web apps. IHP is a new batteries-included web framework optimized for longterm productivity and programmer happiness
julia - The Julia Programming Language
rio-orphans - A standard library for Haskell
hoogle - Haskell API search engine
ghc - Mirror of the Glasgow Haskell Compiler. Please submit issues and patches to GHC's Gitlab instance (https://gitlab.haskell.org/ghc/ghc). First time contributors are encouraged to get started with the newcomers info (https://gitlab.haskell.org/ghc/ghc/wikis/contributing).
cleff - Fast and concise extensible effects
frp-zoo - Comparing many FRP implementations by reimplementing the same toy app in each.
cardano-node - The core component that is used to participate in a Cardano decentralised blockchain.
Cabal - Official upstream development repository for Cabal and cabal-install
idris - A Dependently Typed Functional Programming Language