Scala:部分应用类型构造函数的问题

时间:2018-12-21 15:06:31

标签: scala types higher-kinded-types type-equivalence partially-applied-type

我定义了以下别名类型:

type PartiallyAppliedEither[A] = Either[String, A]

我可以看到以下编译:

def checkTypeEquality1(implicit ev: PartiallyAppliedEither[_] =:= Either[String, _]) = 1

checkTypeEquality1 //compiles

但是这些不:

def checkTypeEquality2[A](implicit ev: PartiallyAppliedEither[A] =:= Either[String, A]) = 1 

checkTypeEquality2 //fails to compile.

def checkTypeEquality3[A](implicit ev: PartiallyAppliedEither[A] =:= Either[String, _]) = 1

checkTypeEquality3 //fails to compile.

为什么第一个等式得到解决,而另一个不解决?

1 个答案:

答案 0 :(得分:3)

您没有指定参数import cv2 init_mask = cv2.imread('/path/to/mask.png',0) img = cv2.imread('/path/to/image.png') mask = np.zeros(image.shape[:2],np.uint8) mask[init_mask == 255] = 1 bgdModel = np.zeros((1,65),np.float64) fgdModel = np.zeros((1,65),np.float64) mask, bgdModel, fgdModel = cv2.grabCut(img,mask,None,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_MASK) mask = np.where((mask==2)|(mask==0),0,1).astype('uint8') mask[mask == 1] = 255 np.all(mask==init_mask) # True 应该是什么,因此编译器甚至无法开始搜索隐式证据,因为它不知道应该找到的东西的类型。

这里的行为完全符合预期:

A

最后一个不会编译,因为如果编译成功,则意味着每种类型都等于其他任何类型,但这不是事实。

相关问题