Allow bidirectional typechecking in the plugin #105
The plugin used to choke on this:
flipShouldBe 11 . sum . fst . run . runFoldMapOutput id $ do output  output $ replicate 2 5
because it would fail to unify
In this case, there are no given constraints, so the plugin is attempting to solve a
[^1]: Pretending it's a wanted breaks the common case of trying to call, eg.
So now we have a "wanted"
foo :: Member (Output (t Int)) r => Sem r () foo = output 
This is a type error, because the polymorphism goes the wrong way. We have no guarantees that
But in our original example, this isn't a problem, because our
Such a thing necessitates a change though. We never want to unify a polymorphic effect in given position. Doing so will break Haskell's regular type inference that determines what the effect row should be, based on the order in which the interpreters are run.