随笔分类 -  Scalaz

Scala泛函组件库
摘要:scala标准库提供了一个Either类型,它可以说是Option的升级版。与Option相同,Either也有两种状态:Left和Right,分别对应Option的None和Some,不同的是Left可以返回一个值。我们通常用这个值来表述异常信息。scalaz也提供了自己版本的Either,并用... 阅读全文
posted @ 2015-12-17 13:24 雪川大虫 阅读(968) 评论(0) 推荐(2)
摘要:说道FP,我们马上会联想到Monad。我们说过Monad的代表函数flatMap可以把两个运算F[A],F[B]连续起来,这样就可以从程序的意义上形成一种串型的流程(workflow)。更直白的讲法是:任何类型只要实现了flatMap就可以用for-comprehension, for{...}y... 阅读全文
posted @ 2015-12-15 17:48 雪川大虫 阅读(1056) 评论(0) 推荐(0)
摘要:我们经常提到函数式编程就是F[T]。这个F可以被视为一种运算模式。我们是在F运算模式的壳子内对T进行计算。理论上来讲,函数式程序的运行状态也应该是在这个运算模式壳子内的,也是在F[]内更新的。那么我们就应该像函数式运算T值一样,也有一套函数式更新程序状态的方法。之前我们介绍了Writer Mona... 阅读全文
posted @ 2015-12-11 10:59 雪川大虫 阅读(1397) 评论(0) 推荐(2)
摘要:在上一篇讨论里我们简单的介绍了一下Cake Pattern和Reader Monad是如何实现依赖注入的。主要还是从方法上示范了如何用Cake Pattern和Reader在编程过程中解析依赖和注入依赖。考虑到依赖注入模式在编程中的重要性和普遍性,觉着还需要再讨论的深入一些,使依赖注入模式在FP领... 阅读全文
posted @ 2015-12-04 11:50 雪川大虫 阅读(1006) 评论(0) 推荐(1)
摘要:我们可以用Monad Reader来实现依赖注入(dependency injection DI or IOC)功能。Scala界中比较常用的不附加任何Framework的依赖注入方式可以说是Cake Pattern了。现在通过Monad Reader可以实现同样功能,两者对比优点各有千秋。所谓依... 阅读全文
posted @ 2015-11-27 19:00 雪川大虫 阅读(1303) 评论(1) 推荐(3)
摘要:Monad Reader就是一种函数的组合。在scalaz里函数(function)本身就是Monad,自然也就是Functor和applicative。我们可以用Monadic方法进行函数组合: 1 import scalaz._ 2 import Scalaz._ 3 object decom... 阅读全文
posted @ 2015-11-25 21:12 雪川大虫 阅读(1543) 评论(0) 推荐(3)
摘要:通过前面的几篇讨论我们了解到F[T]就是FP中运算的表达形式(representation of computation)。在这里F[]不仅仅是一种高阶类型,它还代表了一种运算协议(computationprotocol)或者称为运算模型好点,如IO[T],Option[T]。运算模型规范了运算值... 阅读全文
posted @ 2015-11-20 09:58 雪川大虫 阅读(962) 评论(0) 推荐(1)
摘要:在前面的几篇讨论里我们初步对FP有了些少了解:FP嘛,不就是F[A]吗?也是,FP就是在F[]壳子(context)内对程序的状态进行更改,也就是在F壳子(context)内施用一些函数。再直白一点就是在F壳子内进行OOP惯用的行令编程(imperative programming)。当然,既然是... 阅读全文
posted @ 2015-11-13 19:05 雪川大虫 阅读(949) 评论(0) 推荐(1)
摘要:前面提到了scalaz是个函数式编程(FP)工具库。它提供了许多新的数据类型、拓展的标准类型及完整的一套typeclass来支持scala语言的函数式编程模式。我们知道:对于任何类型,我们只需要实现这个类型的typeclass实例就可以在对这个类型施用所对应typeclass提供的所有组件函数了... 阅读全文
posted @ 2015-10-28 13:45 雪川大虫 阅读(2137) 评论(0) 推荐(3)
摘要:在前几篇关于Functor和Applilcative typeclass的讨论中我们自定义了一个类型Configure,Configure类型的定义是这样的: 1 case class Configure[+A](get: A) 2 object Configure { 3 implici... 阅读全文
posted @ 2015-10-13 19:53 雪川大虫 阅读(644) 评论(1) 推荐(1)
摘要:Monoid是种最简单的typeclass类型。我们先看看scalaz的Monoid typeclass定义:scalaz/Monoid.scala1 trait Monoid[F] extends Semigroup[F] { self =>2 ////3 /** The identit... 阅读全文
posted @ 2015-10-09 21:14 雪川大虫 阅读(855) 评论(0) 推荐(1)
摘要:Applicative,正如它的名称所示,就是FP模式的函数施用(function application)。我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形式是这样的:F[A],即变量A是包嵌在F结构里的。Scalaz的Applicative typeclas... 阅读全文
posted @ 2015-10-05 11:48 雪川大虫 阅读(1204) 评论(0) 推荐(1)
摘要:Functor是范畴学(Category theory)里的概念。不过无须担心,我们在scala FP编程里并不需要先掌握范畴学知识的。在scalaz里,Functor就是一个普通的typeclass,具备map over特性。我的理解中,Functor的主要用途是在FP过程中更新包嵌在容器(高阶... 阅读全文
posted @ 2015-09-26 12:38 雪川大虫 阅读(1431) 评论(0) 推荐(1)
摘要:我们在上一篇讨论中介绍了一些基本的由scalaz提供的typeclass。这些基本typeclass主要的作用是通过操作符来保证类型安全,也就是在前期编译时就由compiler来发现错误。在这篇讨论中我希望能按照scalaz的格式设计自己的typeclass并能使之融入scalaz库结构里去。 我... 阅读全文
posted @ 2015-09-19 17:13 雪川大虫 阅读(1038) 评论(0) 推荐(1)
摘要:Scalaz是由一堆的typeclass组成。每一个typeclass具备自己特殊的功能。用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上。scala这个编程语言借鉴了纯函数编程语言Haskell的许多概念。typeclass这个名字就是从Haskel... 阅读全文
posted @ 2015-09-18 22:13 雪川大虫 阅读(1840) 评论(1) 推荐(2)
摘要:Scalaz是个通用的函数式编程组件库。它提供的类型、函数组件都必须具有高度的概括性才能同时支持不同数据类型的操作。可以说,scalaz提供了一整套所有编程人员都需要的具有高度概括性的通用函数,它是通过随意多态(ad-hoc polymorphism)来帮助用户使用这些函数的。随意多态就是trai... 阅读全文
posted @ 2015-09-09 20:53 雪川大虫 阅读(1957) 评论(1) 推荐(5)
摘要:scalaz功能基本上由以下三部分组成:1、新的数据类型,如:Validation, NonEmptyList ...2、标准scala类型的延伸类型,如:OptionOps, ListOps ...3、通过typeclass的随意多态(ad-hoc polymorphism)编程模式实现的大量概... 阅读全文
posted @ 2015-09-08 08:32 雪川大虫 阅读(2355) 评论(0) 推荐(2)
摘要:在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧。scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成。scalaz typeclass在scala中的应用有赖于scala compiler的一项特别功能:隐式转换(imp... 阅读全文
posted @ 2015-09-06 15:44 雪川大虫 阅读(2993) 评论(1) 推荐(2)
摘要:面向对象编程范畴(OOP)从80年代C++到90年代java的兴起已经经历了几十年的高潮,是不是已经发展到了尽头,该是函数式编程(FP)开始兴旺发达的时候了吧。这样说似乎心眼儿有点坏,可能会得罪当今大多数的编程人员。不过计算机硬件技术的发展往往会催生新的编程技术,这倒是无可反驳的现象。当今世界上计... 阅读全文
posted @ 2015-09-02 17:33 雪川大虫 阅读(2712) 评论(0) 推荐(1)