Improve interactions between recursive and exact types. #390
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.
Currently, you can't create an
exact
recursion
type.RecursiveType
doesn't satisfy theHasProps
type, even if the type it's wrapping does. This is easy to fix by adding aHasPropsRecursive
type toHasProps
and then extendinggetProps
toreturn getProps(codec.type)
for recursive codecs.But now we have another problem: calling
exact
on aRecursiveType
forces the lazy evaluation that makesRecursiveType
work. This causes issues if you're trying to have theexact
be part of the recursion. For example, this fails because the function runs beforeT
is defined:I fixed this by having
exact
delay its evaluation ofprops
until forced by someone callingvalidate
orencode
on the result. I added some tests with a few more examples of things that didn't work before this pullreq.Also, I bumped the version to 2.1.0 since I needed an
@since
for the new types.