Skip to content

Revamp interpretH #386

@KingoftheHomeless

Description

@KingoftheHomeless

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 a

but 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions