Scala中缀类型的实际例子

6

我发现了一种有趣的语法结构,它被称为中缀类型。

例如:

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

现在我正在寻找来自一些流行框架或库的此类型示例。我该去哪里找它们?有什么建议吗?

3个回答

13

shapeless库

有很多函数

多态函数

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]]]

类型标签

Int @@ NonNegative

提供了零成本的运行时,它是Int的类似体,并在标签类型中记忆一些信息。

scalaz库

正如Archeg所提到的,它甚至有更多的东西。

Either

String \/ Long

这是Scala中更酷炫版本的Either[String,Long],在这里了解更多信息。

这些

Boolean \&/ Long

这是一个方便的实现方式。

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

Map

String ==>> Double

这是 haskell 版本的

collection.immutable.TreeMap[String, Double]

单子余积

String :+: Float

这是一种交替的事物列表,其中相似的事物被聚合(添加、连接、选择最大值等),而不是按顺序排列。


返回翻译的文本: +1 不是因为中缀运算列表,而是因为突出显示那些我从未有时间理解的库。这使得理解事物更容易。 - Haspemulator

5

从Scala语言中,泛型类型约束

=:=  =>  A=:=String => A must be String
<:<  =>  A<:<String => A must be subtype of String

4
在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比我更快。请查看他的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接