Fine-grained multifile interfaces proposal #2674
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Recently I was thinking what if I have a module that defines a multifile predicate, but I want some level of control on how it can be extended. For example I may want to allow heads of new clauses only when they are unifiable with my template.
Let's say I have the following predicate in my module:
I want others to import my module and being able to add their own
hello/2
, but with additional constraint: I want to restrict them to greet onlyuser
and not admin or anything else. So the following (new) clause should be allowedgreeting:hello(user, "Hi")
, butgreeting:hello(root, "Hi")
– shouldn't.In my proposal you need to define an "interface":
Which will be replaced during term expansion with a special predicate that will validate other clauses.
I'm open for comments and opinions.