重複の可能性:
タイプの違いを強制する
scala には等価性を強制する一般化された型制約が=:=
あるため、型に対して「等しくない」ことを強制するものはありますか? 基本的!=
には型用?
編集
以下のコメントは既存のQ&Aを示しており、答えは (1) いいえ、標準ライブラリにはありません (2) はい、定義することは可能です。
ですから、答えを見た後に思いついたので、質問を変更します。
既存のソリューションを考えると:
sealed class =!=[A,B]
trait LowerPriorityImplicits {
implicit def equal[A]: =!=[A, A] = sys.error("should not be called")
}
object =!= extends LowerPriorityImplicits {
implicit def nequal[A,B](implicit same: A =:= B = null): =!=[A,B] =
if (same != null) sys.error("should not be called explicitly with same type")
else new =!=[A,B]
}
case class Foo[A,B](a: A, b: B)(implicit e: A =!= B)
A <: B
またはの場合A >: B
、それはまだそうA =!= B
ですか?A =!= B
そうでない場合、そうでない場合、またはそうでない場合に解決策を変更することは可能ですA <: B
かA >: B
?