LYR-MIG0303
two operator results in one declaration
A note of lyric fix --from-4: one declaration conforms to operator interfaces with two different results, and Lyric 5 names one type Out a declaration.
Explanation
Lyric 4's Add<Rhs, Out> took the result as a type argument; Lyric 5's Add<Rhs> names it by type Out, Self where it is left out. The migration writes :: [Add] for Add<Vec2, Vec2> on a Vec2, :: [Mul<float>] for Mul<float, Vec2>, adds type Out = float; to the body where the result is another type, and writes a constraint T :: [Add<T, T>] as T :: [Add<T, Out = T>].
Where one declaration gives two different results from its operators, the second type Out has no place: move one conformance into an extend block of its own, with its type Out.
Example
by hand[LYR-MIG0303] main.lyr:3:37: 'Money' gives 'float' and 'int' from its operators; Lyric 5 names one 'type Out' a declaration — move one of the conformances into an 'extend' block of its own, with its 'type Out'