Skip to content
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

Implement nested types #563

Open
HT154 opened this issue Jun 30, 2024 · 2 comments
Open

Implement nested types #563

HT154 opened this issue Jun 30, 2024 · 2 comments

Comments

@HT154
Copy link
Contributor

HT154 commented Jun 30, 2024

I'd like to be able to do something like this:

class MyA {
  properties: Properties

  class Properties {
    prop1: String
  }
}

class MyB {
  properties: Properties

  class Properties {
    prop2: String
  }
}

aProps: MyA.Properties

Currently, this requires disambiguating classes with only naming, which can lead to very long class names with more deeply nested structures. This code today must look like this:

class MyA {
  properties: MyAProperties
}

class MyAProperties {
  prop1: String
}

class MyB {
  properties: MyBProperties
}

class MyBProperties {
  prop2: String
}

aProps: MyAProperties
@bioball
Copy link
Contributor

bioball commented Jul 1, 2024

I'm kind of bearish on this idea--this feature is a request to use classes as namespaces, and I don't know if that is a suitable use of classes.

Today, I'd suggest doing what you're doing (disambiguate the plain class name), or, alternatively, put them in different modules.

@HT154
Copy link
Contributor Author

HT154 commented Oct 19, 2024

My motivation for opening this is actually described exactly in apple/pkl-pantry#40

This is definitely something I'd discourage in normal use of Pkl, but when used as a tool for disambiguating identically named types without manual name mangling—particularly in conjunction with Pkl code generation—I think this stands to be really valuable.

Also, I think could play a role in a potential non-trivial user generics implementation that may need to consider associated types (like Swift), which would motivate allowing typealias in these same contexts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants