摘要: 在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧。scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成。scalaz typeclass在scala中的应用有赖于scala compiler的一项特别功能:隐式转换(imp... 阅读全文
posted @ 2015-09-06 15:44 雪川大虫 阅读(2996) 评论(1) 推荐(2)
摘要: 面向对象编程范畴(OOP)从80年代C++到90年代java的兴起已经经历了几十年的高潮,是不是已经发展到了尽头,该是函数式编程(FP)开始兴旺发达的时候了吧。这样说似乎心眼儿有点坏,可能会得罪当今大多数的编程人员。不过计算机硬件技术的发展往往会催生新的编程技术,这倒是无可反驳的现象。当今世界上计... 阅读全文
posted @ 2015-09-02 17:33 雪川大虫 阅读(2713) 评论(0) 推荐(1)
摘要: 在前面的几节讨论里我们终于得出了一个概括又通用的IO Process类型Process[F[_],O]。这个类型同时可以代表数据源(Source)和数据终端(Sink)。在这节讨论里我们将针对Process[F,O]的特性通过一些应用实例来示范它的组合性(composibility)和由数据源到接... 阅读全文
posted @ 2015-08-26 21:10 雪川大虫 阅读(902) 评论(0) 推荐(0)
摘要: 在上两篇讨论中我们介绍了IO Process:Process[I,O],它的工作原理、函数组合等。很容易想象,一个完整的IO程序是由 数据源+处理过程+数据终点: Source->Process->Sink所组成的。我们发现:Process[I,O]本身是无法兼顾Source和Sink的功能。而独... 阅读全文
posted @ 2015-08-16 11:51 雪川大虫 阅读(794) 评论(0) 推荐(0)
摘要: 上期我们讨论了IO处理过程:Process[I,O]。我们说Process就像电视信号盒子一样有输入端和输出端两头。Process之间可以用一个Process的输出端与另一个Process的输入端连接起来形成一串具备多项数据处理功能的完整IO过程。但合成的IO过程两头输入端则需要接到一个数据源,而... 阅读全文
posted @ 2015-08-04 13:39 雪川大虫 阅读(2164) 评论(0) 推荐(0)
摘要: IO处理可以说是计算机技术的核心。不是吗?使用计算机的目的就是希望它对输入数据进行运算后向我们输出计算结果。所谓Stream IO简单来说就是对一串按序相同类型的输入数据进行处理后输出计算结果。输入数据源可能是一串键盘字符、鼠标位置坐标、文件字符行、数据库纪录等。如何实现泛函模式的Stream ... 阅读全文
posted @ 2015-07-29 12:03 雪川大虫 阅读(1162) 评论(1) 推荐(0)
摘要: 泛函编程的核心模式就是函数组合(compositionality)。实现函数组合的必要条件之一就是参与组合的各方程序都必须是纯代码的(pure code)。所谓纯代码就是程序中的所有表达式都必须是Referentially Transparent(RT,等量可替换的),它的意思是:在一段程序p中... 阅读全文
posted @ 2015-07-17 10:55 雪川大虫 阅读(920) 评论(1) 推荐(0)
摘要: 在前几期讨论中我们终于推导出了Free Monad。这是一个Monad工厂,它可以把任何F[A]变成Monad。可惜的是它对F[A]是有所要求的:F必须是个Functor。Free Monad由此被称为由Functor F 产生的Monad。F必须是Functor,这个门槛使我们在使用Free M... 阅读全文
posted @ 2015-07-13 13:41 雪川大虫 阅读(678) 评论(0) 推荐(1)
摘要: 由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码(impure code)函数中的纯代码部分(pure code)抽离出来形成独立的另一个纯函数。... 阅读全文
posted @ 2015-07-06 22:20 雪川大虫 阅读(1905) 评论(3) 推荐(1)
摘要: 在上节我们介绍了Free Monad的基本情况。可以说Free Monad又是一个以数据结构替换程序堆栈的实例。实际上Free Monad的功能绝对不止如此,以heap换stack必须成为Free Monad的运算模式,这样我们才可以放心的使用Free Monad所产生的Monadic编程语言了... 阅读全文
posted @ 2015-06-25 14:10 雪川大虫 阅读(1935) 评论(8) 推荐(1)