@@ -12,7 +12,7 @@ Main features:
131. Very fast.
131. Very fast.
15−2. Internals of the library are easy to reason about.
15+2. Internals of the library are reasonably easy to reason about.
173. Correct semantics in presence of runtime exceptions (no more lost or
173. Correct semantics in presence of runtime exceptions (no more lost or
18 discarded state).
18 discarded state).
@@ -24,7 +24,7 @@ Main features:
25 - static dispatch (as fast as it gets, single interpretation) or
25 - static dispatch (as fast as it gets, single interpretation) or
27− - dynamic dispatch (slower, multiple interpretations are possible),
27+ - dynamic dispatch (a bit slower, with multiple interpretations),
29 depending on your needs.
29 depending on your needs.
@@ -51,14 +51,13 @@ However, `eff` uses delimited continuations underneath, which:
51proposal](https://github.com/ghc-proposals/ghc-proposals/pull/313) for including
51proposal](https://github.com/ghc-proposals/ghc-proposals/pull/313) for including
52support for them has been accepted).
52support for them has been accepted).
54−- Are somewhat hard to understand.
54+- Are quite hard to understand.
56−- Make the space of possible effects "too big", i.e. some of their interactions
56+- Make the library "too powerful" in a sense as it faces
57− might no longer make sense. For example, there is no `MonadWriter` instance
57+ [a](https://github.com/hasura/eff/issues/13)
58− for the `ContT` transformer in the `mtl` library, because [it can't be
58+ [few](https://github.com/hasura/eff/issues/7)
59− properly
59+ [issues](https://github.com/hasura/eff/issues/12) with no clear path towards
60− implemented](https://www.reddit.com/r/haskell/comments/hai9kb/why_is_there_no_monadwriter_for_contt_in_mtl/). It's
60+ their resolution.
61− not clear how `eff` can detect and prevent such interactions.
63On the other hand, if support for continuations is excluded from the handler
62On the other hand, if support for continuations is excluded from the handler
64monad, then the ability to define effects with non-linear control flow (such as
63monad, then the ability to define effects with non-linear control flow (such as
@@ -71,7 +70,7 @@ dedicated, well established solution such as
72This is where `effectful` comes in. The `Eff` monad it uses is essentially a
71This is where `effectful` comes in. The `Eff` monad it uses is essentially a
73`ReaderT` over `IO` on steroids, allowing us to dynamically extend its
72`ReaderT` over `IO` on steroids, allowing us to dynamically extend its
74−environment with data types that represent effects.
73+environment with data types that represent effects or their interpreters.
76Because this concept is so simple:
75Because this concept is so simple: