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,这些在后面都会介绍到。