Scala类型真的形成一个格子吗?

aij*_*aij 7 scala algebra

似乎有一种普遍的概念,即Scala类型形成一个格子.

我可以在那里获得四分之三的路径,并通过定义top = ,bottom = 和meet = 来定义半格.那么至少大部分相当于,即子类型关系.AnyNothingwith<:

Scala甚至可以帮助我们测试至少一些晶格定律:

scala> implicitly[Nothing =:= Nothing]
res0: =:=[Nothing,Nothing] = <function1>

scala> implicitly[Nothing =:= String with Nothing]
res1: =:=[Nothing,String with Nothing] = <function1>

scala> implicitly[Nothing =:= String with Any]
<console>:11: error: Cannot prove that Nothing =:= String with Any.
       implicitly[Nothing =:= String with Any]
                 ^

scala> implicitly[Any =:= String with Any]
<console>:11: error: Cannot prove that Any =:= String with Any.
       implicitly[Any =:= String with Any]
                 ^

scala> implicitly[Any =:= Any]
res4: =:=[Any,Any] = <function1>

scala> implicitly[Any =:= Any with String]
<console>:11: error: Cannot prove that Any =:= Any with String.
       implicitly[Any =:= Any with String]
                 ^

scala> implicitly[String =:= Any with String]
res6: =:=[String,Any with String] = <function1>

scala> implicitly[String =:= String with Any]
res7: =:=[String,String with Any] = <function1>

scala> implicitly[String =:= (String with Any)]
res8: =:=[String,String with Any] = <function1>

scala> implicitly[Int with String =:= String with Int]
res9: =:=[Int with String,String with Int] = <function1>

scala> implicitly[Boolean with (Int with String) =:= (Boolean with Int) with (Boolean with String)]                            
res11: =:=[Boolean with Int with String,Boolean with Int with Boolean with String] = <function1>
Run Code Online (Sandbox Code Playgroud)

所以,现在缺少的是一个合适的连接定义.是否有相当于加入 Scala?

你不需要将我的上述定义用于top,bottommeet,但它更受欢迎,因为这不仅仅是一个理论问题.我实际上想要使用两种类型的连接.至于现在要解决此问题,因为我不知道怎么写A 加盟 B,我会定义一个新的trait与在这两种方法抽象方法AB和修改A,并B从它继承.