ambiguous record field (but not *that* kind of ambiguous record field)
Hi all, On a project I'm working on, I wish to declare something like data Rec = MkRec { field :: forall a. SomeConstraint a => ... } where the ... contains no mention of `a`. Even with https://github.com/ghc-proposals/ghc-proposals/pull/448 <https://github.com/ghc-proposals/ghc-proposals/pull/448>, I think there is no way to avoid the ambiguity when setting `field`. Is that correct? If so, what shall we do about it? The natural answer is somehow to write ... MkRec { field @a = ... } ... but that would break significant new syntactic ground. (Maybe it's good new syntactic ground, but it would still be very new.) Thanks, Richard
Hi Richard, I'm not sure if I'm missing something, but my adolescent naivety in frontend matters would try to reach for https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0155-ty... and write MkRec { field = \@a -> ... } and I hope that will do the right thing. Indeed, I interpret your proposed `field @a = ...` as much the same. Sebastian ------ Originalnachricht ------ Von: "Richard Eisenberg" <lists@richarde.dev> An: "Erdi, Gergo via ghc-devs" <ghc-devs@haskell.org> Gesendet: 16.05.2022 21:09:33 Betreff: ambiguous record field (but not *that* kind of ambiguous record field)
Hi all,
On a project I'm working on, I wish to declare something like
data Rec = MkRec { field :: forall a. SomeConstraint a => ... }
where the ... contains no mention of `a`.
Even with https://github.com/ghc-proposals/ghc-proposals/pull/448, I think there is no way to avoid the ambiguity when setting `field`. Is that correct? If so, what shall we do about it? The natural answer is somehow to write ... MkRec { field @a = ... } ... but that would break significant new syntactic ground. (Maybe it's good new syntactic ground, but it would still be very new.)
Thanks, Richard
On May 16, 2022, at 3:45 PM, Sebastian Graf <sgraf1337@gmail.com> wrote:
MkRec { field = \@a -> ... }
Hm -- perhaps you're right. I may have gotten myself all worked up over nothing. I was worried that unification would get confused, not sure that the `a`s match up. But I now think I was wrong -- it should be OK. Thanks, Richard
Hi, Am Montag, dem 16.05.2022 um 19:09 +0000 schrieb Richard Eisenberg:
Hi all,
On a project I'm working on, I wish to declare something like
data Rec = MkRec { field :: forall a. SomeConstraint a => ... }
where the ... contains no mention of `a`.
Even with https://github.com/ghc-proposals/ghc-proposals/pull/448, I think there is no way to avoid the ambiguity when setting `field`. Is that correct? If so, what shall we do about it? The natural answer is somehow to write ... MkRec { field @a = ... } ... but that would break significant new syntactic ground. (Maybe it's good new syntactic ground, but it would still be very new.)
I’m probably revealing ignorance of #448 this way, but why would MkRec { field = \@a -> ...} not work with -XTypeAbstractions Cheers, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/
participants (3)
-
Joachim Breitner -
Richard Eisenberg -
Sebastian Graf