-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Products have Problematic Strictness #68
Comments
Indeed, the instances for This can only be fixed in base. |
Thanks for pointing this out. Should this issue be closed? |
You can keep this open. Maybe there could be a local workaround or extra doc for this issue in generic-data while it gets resolved upstream. |
I wonder how useful the product of monads/applicatives really is. In our paper on bidirectional programming we mainly chose it for simplicity of exposition, but in practice I'd much prefer an approach based on polymorphism. Rather than constructing a biparser as a pair of parser and printer, we can write it as a polymorphic function parameterized by biparser primitives and instantiate it separately to parsers and printers (and possibly more). |
I tried using
gap
for the product explained in your paper Composing bidirectional programs monadically but the generic function has strictness in the parameters which caused the biparserdrop bp = try bp *> drop bp <!> pure ()
to infinitely loop.This is also problematic in base Data.Functor.Product.Product and I have detailed the problem more thoroughly in
haskell/core-libraries-committee#268
or
https://gitlab.haskell.org/ghc/ghc/-/issues/24898
This is probably a problem in more than just
gap
because I found withProduct
it to be a problem withso it would be worth checking those generic functions as well.
The text was updated successfully, but these errors were encountered: