- 
                Notifications
    You must be signed in to change notification settings 
- Fork 73
Description
interpretH is:
- Very confusing to newcomers and experienced users alike
- Clunky to use even if you know what you're doing.
- Not quite powerful enough for some purposes
We need to fix it. The most conservative approach would be to implement an alternative interpretH -- something like #384 -- that addresses these issues without changing interpretH itself; a more radical approach would be to replace interpretH entirely.
Either way, this will be part of the ever-expanding list of issues that v2 should cover. We need to do some work on this to figure out what the best alternate interface would be. My proposal is the following:
interpretHGood :: (  forall z q x
                   . (forall x. z y -> Sem (Opaque q ': r) y)
                  -> e z x
                  -> Sem (Opaque q ': r) x
                  )
               -> Sem (e ': r) a
               -> Sem r abut that implementation requires an extensive rework of the library's internals. This also shouldn't replace interpretH entirely, because there are some power interpretH gains from access to the functorial state that this doesn't have.
For v2, we should at the very least implement a simple stop-gap like #384. If we're able to come up with a satisfying replacement for interpretH in time for v2, we'll include it; otherwise, we'll have it as a long-term goal.