Atitit 理解Monad attilax总结
Atitit 理解Monad attilax总结
但函数式编程最大的一个问题是,函数是一个数学抽象,在现实世界中不存在,1
那既然这样就够用了,还要 Monad 干嘛?Monad 的作用在这里就体现出来了,它就是个加强的胶水函数1
但函数式编程最大的一个问题是,函数是一个数学抽象,在现实世界中不存在,
它必须被模拟出来。目前为止被广泛使用的计算机还是基于图灵机模型,计算机的寄存器、缓存、内存就是用来记录状态的。要真正懂得程序设计,必须知道没有状态的函数是如何在充满状态的计算机上实现的,所以还是绕不开非函数式的编程。另外绝大部分的函数式程序设计语言都不是纯函数式的,出于实用性考虑都夹杂着其他语言的一些特点,并没有完全排斥状态。Haskell 号称纯函数式语言,用 Monad 来抽象状态,理论上可以自圆其说,但在实际使用中其实还是带来了很多不便(于是又发明了 Monad Transformer...)。
从某种程度上说,状态是绕不过去的,毕竟人感知到的宏观世界就是由各种各样有各自状态的对象构成。函数式编程可以帮我们避免很多用其他方式容易犯的错误,在很多情况下写出更高质量的程序,但并发带来的复杂度并不会从根本上消失。各种编程风格一定是互相影响推动程序设计语言的进化,没有绝对的好坏,从 C++ 和 Java 最新标准里引入的函数式方面的功能就很容易看出这一点。比较有意思的是,OOP 最早是在 LISP 里实现的,而 LISP 也被很多人看做函数式编程的起始。同样,好的程序员也会根据具体情况使用合适的编程风格。
那既然这样就够用了,还要 Monad 干嘛?Monad 的作用在这里就体现出来了,它就是个加强的胶水函数
因为不方便。函数式编程的精髓就在于,我们可以用好多好多小小函数,搭搭搭,组成一个个大函数,最终写出整个程序来。如果所有 IO 都要用上面的模型,我们就要把程序里所有需要 IO 的地方都汇总起来,输入做成一个大数据结构,输出做成一个大数据结构,然后再往模型上面凑,很麻烦,这不精髓。
理想的情况是这样:
比如我们想写一个函数
a -> c
然后手头有两个小函数:
a -> b
b -> c
于是我们用一个胶水函数
(a -> b) -> (b -> c) -> (a -> c)
把那两个小函数胶起来,做成我们要的
a -> c
这样是坠好的。
Monad 的作用在这里就体现出来了,它就是个加强的胶水函数。IO Monad 是这些胶水之一,有了它,我们不但可以把小函数胶起来,还能在胶的同时,把他们的头连成一个输入流,把它们的尾巴连成一个输出流,构成最终的 IO 函数,不用吭哧吭哧自己构造 IO 数据结构。
所以,Monad 胶水除了把两个小函数头尾相接拼起来以外,还可以趁机做些别的事情,起到封装一部分操作的作用。不同的胶水作用不同,所以要用不同的类(IO、Maybe 等等)把这些胶水区分开来。然后,
图解 Monad - 阮一峰的网络日志.html
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
简称 Attilax Akbar 阿提拉克斯 阿克巴
全名:Attilax bin Mahmud bin attila bin Solomon Akbar Al Rapanui
阿提拉克斯 本 马哈茂德 本 阿提拉 本 所罗门 阿克巴 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
转载请注明来源:attilax的专栏 http://www.cnblogs.com/attilax/
--Atiend
Atitit 理解Monad attilax总结的更多相关文章
- Atitit 图像处理之理解卷积attilax总结
Atitit 图像处理之理解卷积attilax总结 卷积的运算可以分为反转.平移,相乘,求和. 在图像处理中,图像是一个大矩阵,卷积模板是一个小矩阵.按照上述过程,就是先把小矩阵反转,然 ...
- Atitit 路径规划法attilax总结 扫描线路法
Atitit 路径规划法attilax总结 扫描线路法 2017/2/8 20:43:37[吐槽]深圳-小 2017/2/8 20:43:37 群主做什么的2017/2/10 10:03:15系统消 ...
- atitit.薄伽梵歌overview attilax 读后感
atitit.薄伽梵歌overview attilax 读后感 1. 唯一一本记录神而不是神的代言人或者先知言论的经典 2 2. 篇章规模,字数 3 3. 内容摘要 3 4. 主要内容 3 4.1. ...
- Atitit 软件工程概览attilax总结
Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...
- Atitit 2016年attilax事业成就表
Atitit 2016年attilax事业成就表 1.1. 项目管理模型---Rem模型2 1.2. 项目管理模型---vsi模型val specs implt3 1.3. 研发体系完善(gui与游戏 ...
- Atitit MATLAB 图像处理attilax总结
Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...
- Atitit 边缘检测原理attilax总结
Atitit 边缘检测原理attilax总结 1. 边缘检测的概念1 1.1. 边缘检测的用途1 2. 边缘检测方法分类1 3. 边缘检测的基本方法2 3.1. Roberts边缘检测算子2 3.2. ...
- Atitit 华为基本法 attilax读后感
Atitit 华为基本法 attilax读后感 “精神对物质的比重是三比一” 认可拿破仑的这句格言 在20多年中国商业和企业史上,一个最基本.也是最大的现象就是,为什么"中国制造" ...
- Atitit 乌合之众读后感attilax总结 与读后感结构规范总结
Atitit 乌合之众读后感attilax总结 与读后感结构规范总结 1. 背景概览与鸟瞰overview 1 1.1. 社会背景 与 历史事件背景 与历史时间背景 1 1.2. 书籍简绍 2 1. ...
随机推荐
- 【ImageView】ImageView点击事件报错空指针
今天在使用自定义圆形imageview的时候,想利用其点击事件来实现查看个人资料功能,但是该空间在Activity中的onCreate方法中调用点击事件总是出现空指针异常,每次程序都进不去主页面,到处 ...
- 241. Different Ways to Add Parentheses
241. Different Ways to Add Parentheses https://leetcode.com/problems/different-ways-to-add-parenthes ...
- AsyncOperation变成同步的代码
template <typename TResult> TResult PerformSynchronously(Windows::Foundation::IAsyncOperation& ...
- (01背包变形) Cow Exhibition (poj 2184)
http://poj.org/problem?id=2184 Description "Fat and docile, big and dumb, they look so stupid ...
- vim中输入tab符
今天在写Makefile时各种出错.后来发现是all:的下一行,make前面必须是tab符,不能是空格. 但是vim中只要按tab就会自动转换成4个空格.平时编程需要,也不便把这个设置取消. 查了下, ...
- CreateCompatibleDC 与 CreateCompatibleBitmap 小小结
通常使用CreateCompatibleBitmap时候都会用到CreateCompatibleDC.而是用CreateCompatibleDC的目的不是为CreateCompatibleBitmap ...
- Python成长笔记 - 基础篇 (十三)--堡垒机
堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且 ...
- Drupal 7 安装时的数据库问题
在安装D7时,需要用PhpMyAdmin创建数据库,不建议使用ROOT帐号而需要建立一个新的帐号.一般,建立一个新的账号,如foo,并同时建一个同名的数据库,选择localhost(如果是本地).但是 ...
- 企业搜索引擎开发之连接器connector(三十)
连接器里面采用的什么样的数据结构,我们先从Document迭代器开始入手,具体的Document迭代器类都实现了DocumentList接口,该接口定义了两个方法 public interface D ...
- solr&lucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...