The fast_instance% and inferInstanceAs% term elaborators #
fast_instance% inst takes an expression for a typeclass instance inst, and unfolds it into
constructor applications that leverage existing instances. It uses the expected type to fill in
the constructor applications and lambda binders of data fields.
For instance, when used as
instance instSemiring : Semiring X := sorry
instance instRing : Ring X := fast_instance% Function.Injective.ring ..
this will define instRing as a nested constructor application that refers to instSemiring
rather than applications of Function.Injective.ring or other non-canonical constructors.
The advantage is then that instRing.toSemiring unifies almost immediately with instSemiring,
rather than having to break it down into smaller pieces.
Equations
- One or more equations did not get rendered due to their size.
Instances For
fast_instance% inst takes an expression for a typeclass instance inst, and unfolds it into
constructor applications that leverage existing instances. It uses the expected type to fill in
the constructor applications and lambda binders of data fields.
For instance, when used as
instance instSemiring : Semiring X := sorry
instance instRing : Ring X := fast_instance% Function.Injective.ring ..
this will define instRing as a nested constructor application that refers to instSemiring
rather than applications of Function.Injective.ring or other non-canonical constructors.
The advantage is then that instRing.toSemiring unifies almost immediately with instSemiring,
rather than having to break it down into smaller pieces.
Equations
- One or more equations did not get rendered due to their size.
Instances For
inferInstanceAs% A is shorthand for fast_instance% inferInstanceAs A.
This is preferred over inferInstanceAs when the instance can be reduced to
constructor applications. In that case, the parameters of the constructors will be filled in
using the expected type, so that the instance will unfold nicely during unification.
Equations
- One or more equations did not get rendered due to their size.