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.
Records are a specialized tuple, and they have a typespec format that closely resembles that of tuples. They are not used frequently in Elixir, where structs are preferred, but they still come up. Notably,
MapSet.t/1
builds upon :sets.set/1, which is a union of an old record-based type and a new map-based type. Even thoughMapSet
always uses the map-based implementation under the hood, the typespec includes record typespecs. This is the underlying cause of #146 and #147.Support for records requires two minor changes:
type_to_string/1
assumes there will be at most one name in the spec and that it will be at the top level (for named args). Record typespecs, however, provide a name for each field. This PR preserves the existing format for named args but also allows named components within specs.