03 2016 档案

摘要:我一直在不断的提示大家:FP就是Monadic Programming,是一种特殊的编程风格。在我们熟悉的数据库编程领域能不能实现FP风格呢?我们先设计一些示范例子来分析一下惯用的数据库编程过程: 我这里模拟了一个培训学校内的一些业务。上面设计的是一些基本函数,可以分别对学员、导师、座位进行查询和更 阅读全文
posted @ 2016-03-30 12:25 雪川大虫 阅读(600) 评论(0) 推荐(0) 编辑
摘要:在上面几期讨论中我们连续介绍了Free Monad。因为FP是纯函数编程,也既是纯函数的组合集成,要求把纯代码和副作用代码可以分离开来。Free Monad的程序描述(AST)和程序实现(Interpretation)关注分离(separation of concern)模式恰恰能满足FP要求。我们 阅读全文
posted @ 2016-03-28 11:46 雪川大虫 阅读(540) 评论(0) 推荐(0) 编辑
摘要:在前面几次讨论中我们介绍了Free是个产生Monad的最基本结构。它的原理是把一段程序(AST)一连串的运算指令(ADT)转化成数据结构存放在内存里,这个过程是个独立的功能描述过程。然后另一个独立运算过程的Interpreter会遍历(traverse)AST结构,读取结构里的运算指令,实际运行指令 阅读全文
posted @ 2016-03-25 21:18 雪川大虫 阅读(553) 评论(0) 推荐(0) 编辑
摘要:我们说过自由数据结构(free structures)是表达数据类型的最简单结构。List[A]是个数据结构,它是生成A类型Monoid的最简单结构,因为我们可以用List的状态cons和Nil来分别代表Monoid的append和zero。Free[S,A]是个代表Monad的最简单数据结构,它可 阅读全文
posted @ 2016-03-23 09:49 雪川大虫 阅读(548) 评论(0) 推荐(0) 编辑
摘要:在任何模式的编程过程中都无法避免副作用的产生。我们可以用F[A]这种类型模拟FP的运算指令:A是可能产生副作用的运算,F[_]是个代数数据类型ADT(Algebraic Data Type),可以实现函数组合(functional composition),我们可以不用理会A,先用F[_]来组合形成 阅读全文
posted @ 2016-03-19 15:46 雪川大虫 阅读(569) 评论(0) 推荐(0) 编辑
摘要:在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等。我们也证明了List[A]是个free monoid。我们再看看free monad结构Free的定义:scalaz/Free.scala 我们在上 阅读全文
posted @ 2016-03-18 08:12 雪川大虫 阅读(789) 评论(0) 推荐(1) 编辑
摘要:   我们可以通过自由数据结构(Free Structure)实现对程序的算式和算法分离关注(separation of concern)。算式(Abstract Syntax Tree, AST)即运算表达式,是对程序功能的描述。算法则是程序的具体运算方式(Interpreter),它赋予了算式意 阅读全文
posted @ 2016-03-12 21:30 雪川大虫 阅读(732) 评论(0) 推荐(0) 编辑
摘要:当我们需要定义一些对应高阶类型进行相互类型转换的操作函数时,我们发现scala语言并不提供能定义这种函数的支持。举例来说:如果我们希望定义一个函数把对于任何T值的Option[T]转换成List[T]的话,我们可能这样定义: 1 def toList[T](opt: Option[T]): List 阅读全文
posted @ 2016-03-11 14:47 雪川大虫 阅读(407) 评论(0) 推荐(0) 编辑
摘要:很多时候我们会遇到一些高阶类型F[_],但又无法实现它的map函数,也就是虽然形似但F不可能成为Functor。看看下面的例子: trait Interact[A] case class Ask(prompt: String) extends Interact[String] case class 阅读全文
posted @ 2016-03-11 07:55 雪川大虫 阅读(536) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示