哨兵

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2016年6月27日

摘要: 本系列是在学习Monad时在网上找到的一个老外的博客,作者是MikeHadlow,地址是mikehadlow.blogspot.com, 可惜国内访问不了.这个系列对Monad讲解的浅显易懂,而且有实例代码,认真读完后基本了解Monad是怎么回事,因此花了几天将其翻译出来留存,翻译过程基本直译,去掉 阅读全文
posted @ 2016-06-27 23:45 哨兵 阅读(281) 评论(0) 推荐(0) 编辑

摘要: 还记得我们上一篇delegate类型的parser吗 ,在开始本篇之前,强烈建议你复习一下这个parser定义 public delegate Maybe>Parser(string input) 还记得我们组合这些parser的不易吗?现在我们采用新的方式将parser转换为Monad, 我们已经知道了如何将泛型类和泛型接口转换成Monad, 同样的也可以将委托转换成Mona... 阅读全文
posted @ 2016-06-27 23:40 哨兵 阅读(391) 评论(0) 推荐(0) 编辑

摘要: 我们已经学习了怎样创建一个简单的Monad, MaybeMonad, 并且知道了它如何通过在 Bind函数里封装处理空值的逻辑来移除样板式代码. 正如之前所说的,我们可以在Bind函数中封装更复杂的逻辑. 下面给出一个更复杂更典型的Monad例子,一个解析器Monad. 在本篇将要介绍一个解析器,在之后的篇幅里将会把解析器转换成一个 Monad. 首先我们思考解析器... 阅读全文
posted @ 2016-06-27 23:37 哨兵 阅读(603) 评论(0) 推荐(0) 编辑

摘要: 在上一篇, 我们创建了第一个Monad,Indentity, 它可能是最简单的Monad, 使我们可以快速了解Monad的模式,而不用陷入细节。接下来我们创建一个有用的Monad, Maybe Monad. 如你所知,任何引用类型如果没有指向实际的对象,它的值就是null, 空引用经常导致一些问题。在无法返回一个实例时 null通常被用作method的返回值. ... 阅读全文
posted @ 2016-06-27 23:33 哨兵 阅读(615) 评论(0) 推荐(0) 编辑

摘要: 在上一篇创建了我们的第一个Monad, Identity. 我们确定了类型要变成Monad, 它必须有一个type constructor(Identity), 和两个方法,Bind与ToIdentity //a function Bind, allows us to compose Identity returning functions public static Identity Bi... 阅读全文
posted @ 2016-06-27 23:30 哨兵 阅读(341) 评论(0) 推荐(0) 编辑

摘要: 上一篇中介绍了如何使用amplified type, 如IEnumerable,如果我们能找到组合amplified type函数的方法,就会更容易写出强大的程序. 我们已经说了很多次函数组合, 听起来又干又硬。函数组合其实就是简单编程,当我们写像下面这样的代码时: var customer=customerData.GetById(customerId); var order... 阅读全文
posted @ 2016-06-27 23:27 哨兵 阅读(401) 评论(0) 推荐(0) 编辑

摘要: Monad是非常强有力的概念,在介绍Monad是什么和如何工作的之前,我们应该先确认Monad能解决什么问题。Monad是各种编程问题的的 meta solution,它不是某种特定问题的解决方案,我们将通过一些例子来介绍Monad. Monad是使用amplified type组合函数的模式,ampified type可以看做是带一个泛型参数的泛型类型. IEnu... 阅读全文
posted @ 2016-06-27 23:22 哨兵 阅读(359) 评论(0) 推荐(0) 编辑