[Haskell-cafe] sharing

MarLinn monkleyon at gmail.com
Wed Feb 5 21:29:50 UTC 2020

> I've tried something similar before but ran into a lot of cases where 
> verbose intermediate type annotations where necessary to resolve 
> double-wrapping ambiguities because the monad is abstract in my case:
> xor :: DSL m r => r S -> r S -> m (r S)

Do I understand correctly that the actual content of the streams is not 
important, so S is isomorphic to ()? Or are the contents abstracted away 
into a more complex type? If it's the former, I fail to see why the 
monadic interface is even necessary.

More broadly, could you provide a bigger example of what you're going 
for? I have a rough idea of what the goal is, but a more specific 
example might help.

I also feel like there might be a way to adapt Sebastiaan's idea still. 
But if there isn't yet, there is also a pry-bar lying around: 
RebindableSyntax. All of pure, return, (<*>), fmap, and (>>=) can be 
overwritten, and will be used in (applicative) do notation.


More information about the Haskell-Cafe mailing list