Replies: 1 comment 2 replies
-
Using a subclassing approach would mean this will no longer typecheck (because you are passing a local myDeps: Listing<DependencySpec> = new {
// etc
}
dependencies {
["bar"] = myDeps
} It also makes it harder to interop between Pkl and external data (e.g. parsing JSON into Pkl structs). Rather, it sounds like you're looking for It extension methods. The pipe operator ( function satisfiedBy(meta: Metadata, packageName: String): (Listing<DependencySpec>) -> Boolean = (it: Listing<DependencySpec>) ->
let (package = meta.packages[packageName].package)
it.any((spec) -> spec.name == package.name && spec.version == package.version) Then, used like so: package.dependencies["bar"] |> satisfiedBy(meta, "bar") |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Hey all,
I would like to propose that the standard library classes
Listing
andMapping
become open, so that they can be extended. This would not allow adding properties to the listings/mappings (as they can only accept elements and entries respectively), but rather allow adding methods to the chain.Why?
This enables the use-case of "specialized listings/mappings", where the listings/mappings can be given additional functionality and can be asked questions. Ideal example from an internal project we have:
Workarounds
The alternative to the example above would be having a
Listing
property inAlternatives
:While this doesn't require any changes to the language, it:
output
,What do you think? Alternatively, it would be cool if one could attach methods to type aliases which would also solve this, but that's another discussion.
Beta Was this translation helpful? Give feedback.
All reactions