mirror of
https://github.com/haskell-effectful/effectful.git
synced 2024-11-22 22:14:21 +03:00
Slightly better benchmark access
This commit is contained in:
parent
1fea5c6cb3
commit
186fac2c27
@ -17,7 +17,7 @@ the existing Haskell ecosystem.
|
||||
Main features:
|
||||
|
||||
1. Very fast
|
||||
([benchmarks](https://github.com/haskell-effectful/effectful/tree/master/benchmarks)).
|
||||
([benchmarks](https://github.com/haskell-effectful/effectful/tree/master/benchmarks/README.md)).
|
||||
|
||||
2. Easy to use API (if you know how to use the
|
||||
[MonadUnliftIO](https://hackage.haskell.org/package/unliftio-core/docs/Control-Monad-IO-Unlift.html#t:MonadUnliftIO)
|
||||
@ -74,7 +74,7 @@ It's true that its "effects as classes" approach is widely known and used often.
|
||||
However:
|
||||
|
||||
- `mtl` style effects are
|
||||
[slow](https://github.com/haskell-effectful/effectful/tree/master/benchmarks).
|
||||
[slow](https://github.com/haskell-effectful/effectful/tree/master/benchmarks/README.md).
|
||||
|
||||
- All of most often used monad transformers (except `ReaderT`) used for effect
|
||||
implementations are rife with [subtle
|
||||
|
@ -31,6 +31,11 @@ as that would essentially mean performing whole program specialization.
|
||||
|
||||
The code was compiled with GHC 9.2.3 and run on a Ryzen 9 5950x.
|
||||
|
||||
*Note:* below results are from a 1000 iteration run. Runs with more iterations
|
||||
are not included in the analysis since they are proportionally the same, but can
|
||||
be found
|
||||
[here](https://github.com/haskell-effectful/effectful/tree/master/benchmarks).
|
||||
|
||||
### Countdown
|
||||
|
||||
<img src="https://raw.githubusercontent.com/haskell-effectful/effectful/master/benchmarks/bench_countdown_1000.png">
|
||||
@ -48,7 +53,7 @@ Analysis:
|
||||
- Its `State` implemented via `IORef` is the fastest of the dynamically
|
||||
dispatched effects, but it's worth noting that it's neither properly
|
||||
thread-local nor shared as the underlying `IORef` is shared, but can't be
|
||||
safely updated with `get` and `put` from multiple threads.
|
||||
safely accessed with `get` and `put` from multiple threads.
|
||||
|
||||
3. `freer-simple` does surprisingly well for a solution that's based on free
|
||||
monads.
|
||||
|
Loading…
Reference in New Issue
Block a user