Scala中缀类型的真实例子

时间:2015-10-26 14:14:53

标签: scala

我发现了一个有趣的语法内容。它被称为Infix type

示例:

class M[T, U]
new (Int M String)

现在,我正在从一些流行的框架或库中寻找这种类型的示例。我在哪里可以找到它们?有什么建议吗?

3 个答案:

答案 0 :(得分:11)

shapeless library

有很多人

Polymorphic functions

Set ~> Option

很像

Set[A] => Option[A] forAny {type A}

HLists

Int :: String :: Double :: HNil 

就像

的超灵活版本
(Int, (String, (Double, ())))

Coproducts

Int :+: String :+: Double :+: CNil

就像

的超灵活版本
Either[Int, Either[String, Either[Double, Nothing]]]

Type tags

Int @@ NonNegative

零成本运行时模拟Int,其中一些信息记在标记类型

scalaz library

正如Archeg所提到的更多

Either

String \/ Long

是scala的Either[String,Long]的更酷版本,请阅读更多here

These

Boolean \&/ Long

方便实施

Either[(Boolean, Long), Either[Boolean, Long]]

Map

String ==>> Double

是haskellest版本的

collection.immutable.TreeMap[String, Double]

Monoid Coproduct

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更快。请看他的回答