C# Monads的实现(一)】的更多相关文章

Monads allow you to nest computations. They are a pointed functor that adds mjoin and chain functions to combine other functors. Brian shows a number of code examples of different monads in action. functions: "mjoin", "chain" mjoin: va…
再谈continuation monad 上一篇中我们已经介绍了continuation monad,但是这个monad与Identity,Maybe,IEnumerable monads稍微难于理解,故本篇再次讨论. 首先解决上一篇中最后关于continuation monad的问题,即以下这段代码目前还无法通过编译, .ToContinuation<int, string>() .ToContinuation<int, string>() select x + y; Conso…
了解Haskell语言的朋友都知道它是一门纯函数式编程,输出结果只跟输入参数相关,这导致Haskell不能有输入输出函数,因为不同的环境下,输入相同,但输出可能有所不同.Haskell语言中,变量的值一旦被赋值,则不会再被修改,所以这也导致了它就无法输出——因为输出会改变屏幕.那Haskell中如何实现输入输出功能? Haskell中输入输出的功能是通过Monad方法实现的.本篇不讨论Haskell语言,只讨论基于C#下的Monad实现. 主要参考资料 一.介绍 Monads来自范畴论.在一篇优…
函数式编程中,一切皆为函数,这个函数一般不是类级别的,其可以保存在变量中,可以当做参数或返回值,是函数级别的抽象和重用,将函数作为可重用的基本模块,就像面向对象中一切皆为对象,把所有事物抽象为类,面向对象编程通过继承和组合来实现类或模块重用,而函数式编程通过局部套用来实现函数重用:两种编程模式相辅相成,各有侧重点.函数式编程涉及高阶函数,纯函数.引用透明.闭包.局部套用.部分应用.惰性求值.单子等概念. C#不是函数式程序设计语言,但是随着委托.lambda表达式.扩展方法.Linq.并行库的引…
scala中的Option类型是个很好用的数据结构,用None来替代java的null可以大大降低代码的复杂性,它还是一个更容易解释的状态表达形式,比如在读取数据时我们用Some(Row)来代表读取的数据行Row,用None来代表没有读到任何数据,免去了null判断.由此我们可以对数据库操作的结果有一种很直观的理解.同样,我们又可以用Either的Right(Row)来代表成功运算获取了结果Row,用Left(Err)代表运算产生了异常Err.对于数据库编程我还是选择了Task[Either[E…
for表达式是monad语法糖 先看一组演示样例: case class Person(name: String, isMale: Boolean, children: Person*) val lara = Person("Lara", false) val bob = Person("Bob", true) val julie = Person("Julie", false, lara, bob) val persons = List(lar…
自函子 自函子(Endofunctor)是一个将范畴映射到自身的函子(A functor that maps a category to itself). 函子是将一个范畴转换到另一个范畴.所以自函子是一种特殊的函子. 由三部分组成: 一组元素对象 一组态射 态射组合(二元运算) 假设这个范畴满足结合律,那么它是一个半群:假设半群满足幺元(单位元.identity),那么它是幺半群(Monoid). 因此.函子是将一个Monoid中的元素对象映射到另外一个Monoid的元素对象,态射也是这么映射…
RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习ReactiveCocoa之前,先学习一下概念 ReactiveCocoa 是一套开源的基于Cocoa的FRP框架 .FRP的全称是Functional Reactive Programming,中文译作函数式响应式编程,是RP(Reactive Programm,响应式编程)的FP(Functiona…
介绍monads有点像互联网时代的家庭手工业.我想 “为什么要反对传统?”,但这篇文章将以Scala对待monads的方式来描述. 有个古老的寓言,讲述了几个瞎子第一次摸到大象.一个抱着大象的腿说:“它是一棵树”:另一个摸着大象的鼻子则说:“它是一条大蛇”:第三个则说:“它是一把扇子”... 从这个寓言我们可以得到个结论:古人相信视觉障碍者喜欢调戏大型哺乳动物(此句英文原意可能带有其它含义).幸运的是我们生活在一个更开明的时代.我们也应该了解自己的局限,防止它阻碍我们把握事物的全貌,在某些方面,…
Small The first rule of functions is that they should be small.The second rule of functions is that they should be smaller than that.Functions should hardly ever be 20 lines long. Blocks and indenting This implies that the blocks within if statements…