Scala类型类的小应用之Cats

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • by 壮衣 在之前的博文《Scala类型类的小应用之CSV Encoder》中有一段代码: 这两个方法分别提供了类...
    吐思圈阅读 462评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,139评论 25 708
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,370评论 4 16
  • “他们两个,我都不会选择 ,现在我都放弃了。”这是她说的第一句话。 “为什么?”我震惊了。 一个是她爱的,辛辛苦苦...
    水曦蕊阅读 318评论 2 2
  • 同学,你明天就要解锁大学新技能啦,不要太期待哟。我还是觉得挺好的我比你先入学,可以提供一些关于准备方面的建议,我估...
    雾都与宁阅读 210评论 1 0

友情链接更多精彩内容