
Cats
TIGER_XC
一个Scala童鞋
展开
-
Cats(3)- freeK-Free编程更轻松,Free programming with freeK
在上一节我们讨论了通过Coproduct来实现DSL组合:用一些功能简单的基础DSL组合成符合大型多复杂功能应用的DSL。但是我们发现:cats在处理多层递归Coproduct结构时会出现编译问题。再就是Free编程是一个繁复的工作,容易出错,造成编程效率的低下。由于Free编程目前是函数式编程的主要方式(我各人认为),我们必须克服Free编程的效率问题。通过尝试,发现freeK可以作为一个很好的原创 2016-09-09 08:11:36 · 1055 阅读 · 0 评论 -
Cats(4)- 叠加Free程序运算结果,Stacking monadic result types
在前面的几篇关于Free编程的讨论示范中我们均使用了基础类型的运算结果。但在实际应用中因为需要考虑运算中出现异常的情况,常常会需要到更高阶复杂的运算结果类型如Option、Xor等。因为Monad无法实现组合(monad do not compose),我们如何在for-comprehension中组合这些运算呢?假如在我们上一篇讨论里的示范DSL是这样的:trait Login[+A] c原创 2016-09-13 09:03:44 · 847 阅读 · 0 评论 -
Cats(1)- 从Free开始,Free cats
cats是scala的一个新的函数式编程工具库,其设计原理基本继承了scalaz:大家都是haskell typeclass的scala版实现。当然,cats在scalaz的基础上在实现细节、库组织结构和调用方式上有一些变化,所以对用户来说:cats的基础数据类型、数据结构在功能上与scalaz是大致相同的,可能有一些语法上的变化。与scalaz著名的抽象语法表现形式相比,cats的语法可能更形象原创 2016-09-06 10:02:35 · 1392 阅读 · 0 评论 -
Cats(2)- Free语法组合,Coproduct-ADT composition
上篇我们介绍了Free类型可以作为一种嵌入式编程语言DSL来满足对特定应用的函数式编程。如果我们对每个应用都用一套DSL的话,那么在我们的函数式编程生涯中将会产生许多重复的DSL功能语句ADT。我们应该秉承函数式编程的核心思想:函数组合(compositionality)来实现DSL的组合:用最基本的DSL来组合成适合应用功能要求的复合DSL。我们还是使用上篇那个Interact DSL,这次再增原创 2016-09-08 09:21:33 · 629 阅读 · 0 评论 -
FunDA(0)- Functional Data Access accessible to all
大数据、多核CPU驱动了函数式编程模式的兴起。因为函数式编程更适合多线程、复杂、安全的大型软件编程。但是,对许多有应用软件开发经验的编程者来说,函数式编程模式是一种全新的、甚至抽象的概念,可能需要很长时间的学习、积累才能完全掌握和适应。对一些不算scala编程专家的人来说,如何用他们习惯的方式来使用现成的函数式软件如Slick,Spark等就变得是件很迫切的事情了。设计FunDA的想法就是希望那些原创 2016-12-20 09:56:29 · 600 阅读 · 0 评论 -
PICE(3):CassandraStreaming - gRPC-CQL Service
在上一篇博文里我们介绍了通过gRPC实现JDBC数据库的streaming,这篇我们介绍关于Cassandra的streaming实现方式。如果我们需要从一个未部署cassandra的节点或终端上读取cassandra数据,可以用gRPC来搭建一个数据桥梁来连接这两端。这时cassandra这端就是gRPC-Server端,由它提供cassandra的数据服务。在前面sdp系列讨论里我们已经实...原创 2018-06-30 09:40:51 · 670 阅读 · 0 评论 -
深圳scala-meetup-20180902(2)- Future vs Task and ReaderMonad依赖注入
在对上一次3月份的scala-meetup里我曾分享了关于Future在函数组合中的问题及如何用Monix.Task来替代。具体分析可以查阅这篇博文。在上篇示范里我们使用了Future来实现某种non-blocking数据库操作,现在可以用Task替换Future部分: class KVStore[K,V] { private val kvs = new ConcurrentH...原创 2018-09-21 10:02:18 · 202 阅读 · 0 评论 -
深圳scala-meetup-20180902(3)- Using heterogeneous Monads in for-comprehension with Monad Transformer
scala中的Option类型是个很好用的数据结构,用None来替代java的null可以大大降低代码的复杂性,它还是一个更容易解释的状态表达形式,比如在读取数据时我们用Some(Row)来代表读取的数据行Row,用None来代表没有读到任何数据,免去了null判断。由此我们可以对数据库操作的结果有一种很直观的理解。同样,我们又可以用Either的Right(Row)来代表成功运算获取了结果R...原创 2018-09-28 12:17:14 · 196 阅读 · 0 评论