Scala类型类的小应用之Cats

2018-01-15  本文已影响0人  吐思圈

by 壮衣

在上一篇博文《Scala类型类的小应用之Functor Foldable》中留了一个尾巴:介绍Functor和Foldable类型类之后引入了Cats,这篇博文将介绍下如何使用Cats中的Functor和Foldable来完成功能。
先引入Cats的依赖:

libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "1.0.1"
)

在需要使用Functor和Foldable的地方引入Cats的Functor和Foldable:

import cats.{Functor, Foldable}

然后就可以去掉自己定义的Functor和Foldable类型,其它的可以不用变动。现在可以开始测试代码了:

scala> Encoder[Vector[Int]](Vector(1, 2, 3))
<console>:16: error: could not find implicit value for evidence parameter of type org.forcestudy.csvz.Encoder[Vector[Int]]
       Encoder[Vector[Int]](Vector(1, 2, 3))

显然没有引入对应类型类的实例,幸运的是Cats已经实现了常见类型的类型类实例,所以我们可以拿来主义直接引用:

scala> import cats.implicits._              
import cats.implicits._

scala> Encoder[Vector[Int]](Vector(1, 2, 3))
res2: String = 1,2,3

scala> Encoder[List[List[Int]]](List(List(1, 2, 3), List(4, 5, 6)))
res3: String =
1,2,3
4,5,6

scala> Encoder[List[Person]](List(Person("zdx", 29, 145.0), Person("ygy", 28, 185.0)))
res4: String =
zdx,29,145.0
ygy,28,185.0

可以看到,使用Cats可以明显减少我们的代码,我们不必去构建各种typeclass和对应的实例,直接使用就可以了。当然Cats中的typeclass不只有Functor和Foldable,除了丰富的typeclass,Cats还提供了丰富的datatypes,这些在后面都会介绍到。

上一篇 下一篇

猜你喜欢

热点阅读