effectful
post-rfc
effectful | post-rfc | |
---|---|---|
21 | 27 | |
334 | 2,186 | |
4.5% | - | |
8.0 | 2.3 | |
6 days ago | 10 months ago | |
Haskell | ||
BSD 3-clause "New" or "Revised" License | Creative Commons Attribution 4.0 |
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:
https://www.youtube.com/watch?v=BUoYKBLOOrE
-
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
-
How to Handle My Horrible Haskell: Global State
I think ReaderT over IO or an algebraic effect system that uses it under the hood like effectful is the way to go. However, you mentioned redux, so perhaps you'd be comfortable with organizing things using TEA (the elm architecture)? You would have actions that different components listen to , and your async stuff could be handled using subscriptions.
-
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).
-
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".
https://github.com/haskell-effectful/effectful
-
Published my first Haskell library on Hackage: xdg-basedir-compliant
Also note that Polysemy has some really bad performance characteristics. Don't know how much of a problem it could be at such a small scale, but if you need to use an effect system, maybe something faster like effectful would be a better choice.
-
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.
post-rfc
-
Haskell in Production: Standard Chartered
That's what it's best for, but personally I use it for everything. If I ever get into low-level code I'll probably use Rust though.
You can confirm that parsers/tokenizers is ranked "best in class" here though:
https://github.com/Gabriella439/post-rfc/blob/main/sotu.md
-
Recommendations for well informed, up-to-date guide to Haskell backend engineering
Note that this is ported from here: https://github.com/Gabriella439/post-rfc/blob/main/sotu.md which comes with more exposition.
-
I want to learn Haskell, but...
State of the Haskell Ecosystem
-
Why are haskell applications so obscure?
According to State of the Haskell ecosystem, Haskell is THE language of choice for implementing compilers, and THE language of choice for writing parsers. Thus, it is not surprising to see more Haskell projects from those particular categories than from other categories.
-
base case
This is great for understanding what libraries to use in the Haskell ecosystem: https://github.com/Gabriella439/post-rfc/blob/main/sotu.md
-
Haskell for beginners
In particular, I got comfortable reading hackage documentation to understand quickly how to use libraries (aeson, megaparsec, mtl, pipes, etc), got comfortable with the ecosystem (this helped: https://github.com/Gabriella439/post-rfc/blob/main/sotu.md), got comfortable with the main language idioms and features (https://smunix.github.io/dev.stephendiehl.com/hask/tutorial.pdf) and got comfortable with simple things that for some reason had confused me before (case, \case, let).
- What can I do in Haskell? UwU
-
Is there "Are We <#$%&> Yet" type of websites for Haskell?
Gabriella Gonzalez has a great doc that is reasonably up-to-date, sounds similar to what you're looking for? https://github.com/Gabriella439/post-rfc/blob/main/sotu.md
- What I wish I had known about voice feminization from the beginning
-
Haskell for Artificial Intelligence?
With that being said, Python is without a doubt the best option, and I'd also be very interested to read the articles you found that say that Python is not a good choice because it's been the industry standard for a long time now. Data science and machine learning are one of the areas where the Haskell ecosystem is not as strong as other languages, but libraries and tools do exist. There's a great list of Haskell resources by domain here, and as you can see, there are Haskell bindings to tensorflow and pytorch, along with other libraries that support common data science programming.
What are some alternatives?
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
cleff - Fast and concise extensible effects
envy - :angry: Environmentally friendly environment variables
unliftio - The MonadUnliftIO typeclass for unlifting monads to IO
hackage-server - Hackage-Server: A Haskell Package Repository
ghc-proposals - Proposed compiler and language changes for GHC and GHC/Haskell
rlua - High level Lua bindings to Rust
hpqtypes-effectful - Effectful bindings for hpqtypes
awesome-haskell - A collection of awesome Haskell links, frameworks, libraries and software. Inspired by awesome projects line.
PolysemyCleanArchitecture - Showcasing how the Polysemy library can be used to implement a REST application conforming to the guidelines of the Clean Architecture model.
hoogle - Haskell API search engine