Complete creator/maker functions for type t #884
Merged
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.
Sometime we reach a
type t
from a module when completing expressions, and cannot go any further becausetype t
might be abstract, or something we cannot complete. This is pretty common when usingtype t
to hide implementation.In those scenarios, it's a convention to provide
make
or other creator functions if the type can be constructed. This PR adds completions for all maker-style functions whenever constructing an expression where the expected type istype t
and we can't go any further in the resolution.This is going to make APIs where the type is abstract and hidden behind
type t
a lot more discoverable.Example from a classic situation where the value we're supposed to pass is an abstract
type t
that hides the implementation oft
and has its ownmake
function (quite common scenario):Another example where
type t
is abstract and hidden behind different maker functions (fairly common in bindings when binding to something very polymorphic that cannot be represented in the type system):