3
def meh[M[_], A](x: M[A]): M[A] = x
meh((x: Int) => "")
SI-2712(https://issues.scala-lang.org/browse/SI-2712)の後、修正型Aは右端の型パラメータに推論されます。 Function1 [Int、String]の私の例では、Stringです。型コンストラクタ推論の上位統一
左パラメータに推論させる方法は?
なぜこのアプローチが機能していないのですか?
class T[K,M]{}
def inferToLeft[S[_,_],K,B](ot: S[K,B]):({type Op[T] = S[T,B]})#Op[K]= ot
meh(inferToLeft(new T[Int,String]))
それはまだStringに推測されています
の代わりのInt
私は質問の最初の部分の答えを見つけることができたと思います:この問題を「修正」し、左から右、右から左の部分的な統一を許していた猫とスカラジにUnapplyクラスがありました。 "左から右への"ケースは非常にまれであるため、Unapplyはcatsライブラリから削除されました。 SI-2712は左から右への統合を許可していません。この目的のために、スカラズまたは子猫のプロジェクトのUnapplyクラスを使用する必要があります。 –