所以我最近阅读了以下打击帖子: http: //www.chuusai.com/2011/06/09/scala-union-types-curry-howard/
我真的很欣赏这种方法!我正在尝试制作一个功能
def neq[A,B] = ...
其中 neq[String, String] 不会编译,但 neq[String, Int] 会。看起来这应该是可能的,但我认为我没有足够深入地理解我们可以使用 curry-howard 对类型中的逻辑进行编码的方式。
我失败的尝试如下:
我认为我们想要的本质上是一个异或。所以我们想要
A and ~B or ~A and B
由于在进行隐式解析时我们在 scala 中所拥有的只是 <:<、=:= 之类的东西,我认为我需要在其中包含一个暗示,因为那是 <:<。所以我们说:
~(A and ~B) => (~A and B)
但是,如果我尝试执行以下操作,这将不起作用:
implicitly[((String with (Int => Nothing)) => Nothing) <:< ((String => Nothing) with Int)]
这是有道理的,因为类型根本不匹配。所以我真的不知道该去哪里!希望得到任何指导。