Haskell语言为什么值得你去学习

当我向一些新手推荐学习Haskell语言时,得到的反应通常是:“为什么要学Haskell?”,“这是一种实用的语言吗?”或者“这是一种我可以真正的语言吗?”我的回答是明确的YES。

Haskell并不是我工作时的主要语言(我基本上是为嵌入式系统写C程序),但我仍然发现Haskell难以置信的有用。虽然我的工作从来不用Haskell,我仍然认为花时间去学习它是值得的。那么,为什么要学习Haskell语言呢?

1. Haskell语言能很好的帮助运用C语言

事实证明,Haskell语言是一种非常强大的工具,能帮助你写好C程序。我使用Haskell能做的事情经常是我平时认为用常规方法根本不可行的事。

比如说,我的同事想在代码库里找到所有用在if条件语句里的叫做foo的变量。感谢神奇的language-c程序包以及Haskell语言的泛型,我可以写出一个Haskell函数,让它接受一个预处理的C源代码路径作为输入值,输出找到的位置(如果有的话),就像下面:


  1. parseAndFindFoos :: FilePath -> IO (Either ParseError [Position])  
  2.  
  3. parseAndFindFoos path = liftM (fmap findFooLocations) (parseCFilePre path)  
  4.  
  5. findFooLocations input = fmap posOf (listify isIfOfInterest input)  
  6.  
  7. isIfOfInterest (CIf cond _ _ _) = not (null (listify isFooIdent cond))  
  8.  
  9. isFooIdent (Ident name _ _) = name == "foo" 

如果不包括类型标识,只有4行Haskell代码!类型标识通常用来做推导,它通常会被当作说明放到doc里。

这只是一个用在文章里起说明作用的小例子。我使用Haskell语言做了远比这复杂多的任务,例如从全局声明或函数里提取名称和类型,或执行变换,往符合条件的表达式里插入日志函数或边界检查代码。你找不出多少其它语言能像Haskell语言那样让你又快又简洁的完成这种事情。

我并非是唯一一个在C语言开发中使用Haskell语言的人

我的一个同事开发了一个神奇的工具,叫做plunge,它能让你比较预处理的C代码和源代码,显示出源代码中的每行出现在经过预处理的代码的什么位置。

同样,还有:

  • atom – 一种Haskell语言开发的面向领域编程语言(DSL),能够执行编译调度,在限定的内存使用和准确的时间里编译编译代码。
  • copilot – 一种用Haskell开发的流式(例如无限长列表)DSL,可以编译进嵌入式C程序中。
  • ImProv – 用Haskell写的一种命令式编程语言,用于高保障性应用。

还有很多。

2. Haskell语言会改变你思维的方式

我真切的认为,学习Heskell编程能够立即直接带来的在编程方式上的附加效应就是,它会永远的改变你编程思考的方式。没错,没错,我知道这听起来像那种不疼不痒的、含糊的废话,但我是很严肃的!学习Haskell语言已经对我编程方式、我思考的方式产生了大量的影响,比任何我在学校里学的任何东西的影响都大,比任何我工作上的经验的作用都大。

你是否尝试过写出一个复杂的函数,但里面不含任何的可变变量?头次尝试这样写是十分痛苦的。但一旦你有了一些经验,不仅你会发现它会变得很容易,而且你会开始认识到,你的函数可以分割成更小的片段,比你最初想象的更小。那些复杂的函数将会变的完全不是那么复杂;它们可以变成由三个简单函数组成的函数!

这就像是,你只用右脚踢足球,但有一天,你的教练禁止你使用右脚。起初你怎么踢都觉得别扭。但最终你左脚变的和你的右脚一样厉害,你最终成为了一名更优秀的足球运动员。

Haskell语言是如此的与众不同,以至于它会迫使你用完全不同的方式思考你的程序。这就是它是一种很难学的语言的原因之一,但同样也是为什么学习它能获得这么多益处的原因。

3.Haskell语言陡峭的学习曲线是件好事

在学习Haskell语言时,人们最常见的抱怨是它陡峭的学习曲线。人们的感觉是对的,它的确具有一个陡峭的学习曲线。它给你的感觉就像是完全重新学习编程。它需要你费点功夫来忘掉你直觉上想用的那种编程模式。没有可变变量!静态类型!我的神呀,它可以把一个函数当成参数,并返回这个函数!怎么会有这种事!?

Haskell语言的难点并不是那些复杂的东西,而是那些简单的东西。比如Monads;Monads是出奇的简单。它就是一种数据类型,它的实例由两个非常简单的函数实现。大部分的实现都只有一、两行代码!领会这些隐式的,有用的,强大的东西会花去你大量的努力。深奥的东西需要花时间去学。这很正常。这意味着你在学一些值得学的知识。

时间: 2024-12-30 12:51:29

Haskell语言为什么值得你去学习的相关文章

十天权重7的网站真的值得你去学习吗

最近在A5站长网看到一篇赞美十天权重7的小说网站,美其名是SEO技术与思维的大碰撞,乍一看站长工具的数字确实让人触目惊心,十天权重7,收录和反链 数字能让每个草根站长汗颜.那么我们应该去学习他的这种技术和思维吗?说实话我看不出有什么技术和思维而言,也许有的网站十年都做不到权重7,但这个网站 上线十天就做到了,暂且不论他是用什么方法做的,这只会严重误导新手,给整个SEO界带来浮躁之风,为本来就不平衡干净的互联网环境雪上加霜.   先看友情链接,发现有很多权重7或6域名较老的小说站,原来这个新站有很

关键词内容页的排名更值得站长去研究

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 数据分析在seo中不可以缺少,不管是刚建设的网站,还是在优化中的网站都是如此,时刻得关注关键词的排名动态和其他的一些数据变化,如网站快照的变化与关键词排名的变化.网站的收录.外链的增加与减少等等这些都是需要记录下来的. 对于关键词的排名,以前的方法主要是分析排名前五的网站,分析他们的快照更新.收录.外链情况是怎么样的,是否有高权重的外链等,通

SEO为什么每天都要不断的去学习

seo为什么每天要学习,要学习一些什么知识,怎样去学习,在哪个时间段去学习,针对这一系列的问题,我想要和大家分享一下,作为一名seo学习的必要性,以及每天学习和怎样去学习. 其实很多人,我不知道大家有没有和我一样的感觉,就是学习seo学到后面,感觉所有的seo书籍上所讲的都是一样的,无非都是从基础开始讲起,怎样建站,怎样选择关键词,怎样做好网站的内链,布局怎样去发外链,无非都是这些东西,而实质性的东西却没有讲出来,我记得我家里的几本seo书籍都是到此为止,而最核心最重要的东西却没有讲,那就是如何

献给迷茫中的初学者如何去学习编程_经典网摘

最近看到很多朋友问到如何学习编程这个问题,我想这个问题应该是所有初学者都非常关注的问题了,在论坛上回答了很多也讲了很多,但是总是无法让所有朋友得到一个解答,所以我想写一下自己的经验,希望对大家有所帮助,不过在此先声明,我并非什么高手,我也只是刚刚入门而已,也只是希望通过写一点个人的体会帮助一些和我遇到相同问题的朋友,高手就免看了,以免班门弄斧.      好了,废话就不多说了.在学习程序之前,我想大家首先应该对程序员这个行业熟悉一下,更加要对编程的语言以及所涉及到的工具有所了解.因为如何过了解这

值得我们企业学习的Google五个品牌建设秘诀

中介交易 SEO诊断 淘宝客 云主机 技术大厅 你可以问任何一个设计师,他们可能都会认为谷歌(Google)的品牌标志是所有品牌标志中最丑的.现在很多企业,一旦新的CEO上任,很可能会改变品牌标志或是改变企业定位.然而,谷歌不仅一直坚持使用自己"丑陋"的品牌商标,同时还让它成为世界上最知名的企业标志之一,同时也是世界上最有价值的品牌.一如既往的品牌标志一致性是谷歌最显著的品牌建设秘诀之一,那么谷歌在营销方面还有什么值得企业学习的? 1.保持品牌标志一致,但并不偏执. 虽然谷歌的商标一直

宋卫平:看到别人好我就去学习

21世纪经济报道 荆宝洁 杭州 北京报道 "千亿万科"(000002.SZ)将绿城中国(3900.SH)远远甩在身后,但宋卫平不愿服输. 2010年12月10日,绿城秋季恳谈会上,绿城董事长宋卫平对今年交出的成绩单直言"不满意",远未达到去年绿城制定的增长目标.截至2010年11月30日,绿城集团全国74个在售项目,累计完成总销售额达468亿元,而瑞银11月发表的报告预计,今年全年绿城的销售额将在520亿元左右.对比2009年,绿城销售额实现517亿元,仅次万科,位

R语言中不能进行深度学习?

更多深度文章,请关注:https://yq.aliyun.com/cloud 众所周知,R语言是统计分析最好用的语言.但在Keras和TensorFlow的帮助下,R语言也可以进行深度学习了. 在机器学习的语言的选择上,R和Python之间选择一直是一个有争议的话题.但随着深度学习的爆炸性增长,越来越多的人选择了Python,因为它有一个很大的深度学习库和框架,而R却没有(直到现在). 但是我就是想使用R语言进入深度学习空间,所以我就从Python领域转入到了R领域,继续我的深度学习的研究了.这

大数据 学习 编程-大数据开发师该如何去学习?

问题描述 大数据开发师该如何去学习? 本人大二了,对大数据比较感兴趣,以后想成为一位 大数据研发师 ,大一学了C++和SQL还有一点Linux,请问接下来还需要学些什么呢?各位大大能不能给一条比较清晰的 学习路线 ,我学的有点迷茫了,感觉学的好杂

有了深度学习,传统的机器学习算法没落了吗,还有必要去学习吗?

深度学习在最近两年非常火爆,它迅速地成长起来了,并且以其疯狂的实证结果着实令我们惊奇. 但深度学习是否真的就取代了传统或者其他机器学习算法了呢?那么,传统的机器学习还有必要去学习吗? 首先来看一位同学的心得: Google DeepMind研发工程师Jack 谈及深度学习会导致其他学习算法濒临灭绝,我不赞同,也不反对,因为学习成本和时间是成正比的. 你需要一个自上而下的方法来学习机器学习.一种你想要专注于实际结果的方法:使用现代的方式和"单项最优"的工具与平台来处理实际的端到端的机器学