Record component type can be an inner class of a record

Gavin Bierman gavin.bierman at
Mon Apr 13 16:37:14 UTC 2020

Thanks for pointing this out Remi. We definitely need to tweak the draft spec to deal with this scoping question. 

However, I am of the opinion that this example should not be allowed. I would expect the scope of things defined in a record body to be the record body. I don’t think the record header should be considered part of the body. Analogously:

class Foo<T extends Bar> {
    class Bar { … }

This doesn’t work as the scope of the Bar declaration is the class body.

What do you think?

> On 24 Mar 2020, at 20:57, Remi Forax <forax at> wrote:
> Hi all,
> a record component can use as type a type declared inside the record itself,
> in term of scoping it's like if the record component is part of the internal scope of the record.
> record Foo(Bar bar) {
>  class Bar {
>  }
> }
> I think it's the right behaviour but i was not able to find any reference to that in the spec.
> regards,
> Rémi

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the amber-spec-experts mailing list