[GHC] #11824: GHC error in desugarer lookup
Simon Peyton Jones
simonpj at microsoft.com
Tue Apr 19 11:21:57 UTC 2016
Oh, you are right. I was thinking of generating the Typeable bindings (and record selectors) at the end of tcTyAndClassDecls. That would work perfectly EXCEPT that we only want to generate the module-name bindings once.
But it's easy to spot if it's been done already because tcg_tr_module is a Just.
So, I suggest you generate Typeable binding along with record selectors, at the end of tcTyAndClassDecls; but take care that mkModIdBindings is a no-op if tcg_tr_module says it's been done already.
But I don't mind if you want to leave it as-is, provided you comment to avoid the confusion I fell into.
Simon
| -----Original Message-----
| From: Ben Gamari [mailto:ben at well-typed.com]
| Sent: 17 April 2016 10:44
| To: Simon Peyton Jones <simonpj at microsoft.com>
| Cc: GHC developers <ghc-devs at haskell.org>
| Subject: RE: [GHC] #11824: GHC error in desugarer lookup
|
| Simon Peyton Jones <simonpj at microsoft.com> writes:
|
| > | The problem is this: we must generate and typecheck record
| selectors
| > | on a per-group basis, since they may be used by later groups.
| >
| > Why? Record selectors are value bindings which aren't used when
| typechecking data types.
| >
| Yes, they are value bindings and may be used in bindings in later
| groups. For instance, let's consider the following,
|
| data ARecord = ARecord { aField :: Int }
|
| $(return []) -- group delimiter
|
| aFieldIncr :: ARecord -> Int
| aFieldIncr = succ . aField
|
| My point in,
|
| > | we must generate and typecheck record selectors on a per-group
| basis
|
| is that we must generate the `aField` binding before proceeding to
| typecheck the second group (containing `aFieldIncr`). Failing to do
| this would result in `aField` being out of scope when we attempted to
| typecheck the RHS of `aFieldIncr`. Perhaps I have misunderstood?
|
| Cheers,
|
| - Ben
More information about the ghc-devs
mailing list