Brings as
into line with the other operators wrt Focus
#1112
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.
From
parameter to the Focusas
keyword, constrained by a type bounds. This is now the same signature as the externalas
operator:FocusKeyword
pattern matcher to correctly interpret an extension method with both inferred and direct type parameter lists.GenPrism
toAsPrism
. It is no longer analogous to the deprecatedGenXXX
features, and should not forward toFocus
. It is an implementation detail for the new and supportedas
operator.AsGenerator
implementation to directly useAsPrism
, rather than have its own operation. This is now the same as the other features, which all generate code that delegates to the external operator. We are using the implementation classAsPrism
rather than the directas
operator because the external one is only accessible as an optic extension method. The way Focus works, each optic is generated on its own and composed together later, so we can't call an extension method on the last thing generated.CastTo <: To
constraint in theAsPrism
implementation, because proving the relationship was hard inside the Focus macro. It is sufficient to enforce the constraint in the public interface.as
operators commute with respect to each other, just like the other operators