分型证明

时间:2018-07-19 22:56:42

标签: scala types proof

假设我有两个类型Type1Type2以及类型Type1 <:< Type2Type2 <:< Type1的(非相异)值,Type1Type2不是是同一类型?

假设这样的事情是不可能的(我不认为这是事实),那么标准库中用于操纵此类证据的函数是吗?例如,功能如下:

def eq[A, B](ev1: A <:< B, ev2: B <:< A): A =:= B = ???
def sym[A, B](ev: A =:= B): B =:= A = ???

基本上等同于Haskell中的Data.Type.Equality(但也包含涉及子类型化的实用程序)。

编辑

我显然可以欺骗一些原始方法,但这种方法击败了首先使用=:=<:<的地步...

def eq[A, B](ev1: A <:< B, ev2: B <:< A): A =:= B = =:=.tpEquals[A,A].asInstanceOf
def sym[A, B](ev: A =:= B): B =:= A = =:=.tpEquals[A,A].asInstanceOf

0 个答案:

没有答案