So, I have these declarations
which bottom out with these type aliases
but then these definitions
fail with errors like
overriding method leftDistribute in trait TRigCategory of type [A, B, C]=> this.Multiply[A,this.Add[B,C]] => this.Add[this.Multiply[A,B],this.Multiply[A,C]];
[error] method leftDistribute has incompatible type
[error] def leftDistribute[A, B, C]
[error] ^
[info] [A, B, C]=> (A, Either[B,C]) => Either[(A, B),(A, C)] <: [A, B, C]=> this.Multiply[A,this.Add[B,C]] => this.Add[this.Multiply[A,B],this.Multiply[A,C]]?
[info] => (A, Either[B,C]) => Either[(A, B),(A, C)] <: => this.Multiply[A,this.Add[B,C]] => this.Add[this.Multiply[A,B],this.Multiply[A,C]]?
[Info] false
[info] false
and if I remove the explicit type annotations, it’s like
type mismatch;
[error] found : scala.util.Left[(Any, Any),Nothing]
[error] required: this.Add[this.Multiply[A,B],this.Multiply[A,C]]
[error] (which expands to) cheshire.TCommutativeSemigroup#Product[cheshire.TMonoid#Product[A,B],cheshire.TMonoid#Product[A,C]]
[error] case (a, Left(b)) => Left((a, b))
[error] ^
[info] scala.util.Left[(Any, Any),Nothing] <: this.Add[this.Multiply[A,B],this.Multiply[A,C]]?
[info] false