在猫中使用[T:Type]的目的是什么?

时间:2018-09-11 14:38:21

标签: scala scala-cats

我正在学习使用Scala猫库。我经常会看到这类定义,例如

implicit def validatedApplicative[E : Semigroup]: Applicative[Validated[E, ?]] = ???
def parallelValidate[E : Semigroup, A, B, C](v1: Validated[E, A], v2: Validated[E, B])(f: (A, B) => C): Validated[E, C] = ???
def parse[A : Read](key: String): Validated[ConfigError, A] = ???
  • 有人可以告诉我为什么我们在A的泛型中将ClassName定义为[A : ClassName]类型吗?

  • 当将方法定义编写为

    时,我们还能获得什么额外的好处

    def parse[A : Read](key: String): Validated[ConfigError, A]

    代替

    def parse(key: String): Validated[ConfigError, Read]

    用于方法声明?

1 个答案:

答案 0 :(得分:0)

Cats在所有地方都使用类型类,当您想了解更多有关功能方法的知识时,应该注意一下。

类型类可以定义如下:

trait Read[A] {
  def read(in: A): String
}

当指定这样的类型时:[A:读取]

您要求使用的A类型必须在范围内具有typeClass Read的实现。

与要求您的类型扩展许多不同的接口相比,这使得编写通用代码非常简单。

我相信在cats网站上有一些博客介绍类型类