我发现了一个有趣的语法内容。它被称为Infix type
。
示例:
class M[T, U]
new (Int M String)
现在,我正在从一些流行的框架或库中寻找这种类型的示例。我在哪里可以找到它们?有什么建议吗?
答案 0 :(得分:11)
有很多人
Set ~> Option
很像
Set[A] => Option[A] forAny {type A}
Int :: String :: Double :: HNil
就像
的超灵活版本(Int, (String, (Double, ())))
Int :+: String :+: Double :+: CNil
就像
的超灵活版本Either[Int, Either[String, Either[Double, Nothing]]]
Int @@ NonNegative
零成本运行时模拟Int
,其中一些信息记在标记类型
正如Archeg所提到的更多
String \/ Long
是scala的Either[String,Long]
的更酷版本,请阅读更多here
Boolean \&/ Long
方便实施
Either[(Boolean, Long), Either[Boolean, Long]]
String ==>> Double
是haskellest版本的
collection.immutable.TreeMap[String, Double]
String :+: Float
是交替列出的东西,其中类似的东西被聚合(添加,连接,选择最大等)而不是排序
答案 1 :(得分:5)
从scala语言,广义类型约束
dll
答案 2 :(得分:2)
在scala库中有一个名为::
的类。它被使用,所以你可以像这样匹配列表:
def m(l : List[Int]) = l match {
case a :: b => println("Matched") // The same as case ::(a, b) => ...
case _ => println("Not matched")
}
我认为像scalaz这样的库中有很多其他的例子,但这个例子是最规范的。
<强>更新强>
只是明白它并不是你想要的 - 你想要的类型。在答案中添加=:=
和<:<
,但@johny更快。请看他的回答