-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpreamble.tex
11 lines (6 loc) · 2.09 KB
/
preamble.tex
1
2
3
4
5
6
7
8
9
10
11
\section{序言}
本文的读者是对Haskell语言已经具有基本了解的新手。或许你们曾经尝试理解Haskell的一个关键概念,也就是Monad。假如理解起来有难度,或者确实已经理解,但还想登堂入室或者了解其背后的动机或背景,本文便是为你而作。
Haskell是一门函数式语言。这一点并无特殊之处,但其设计使它易于学习、理解,并且实践中非常有效(effect)和高效(efficient)。Haskell有一个非常特殊的特性,也就是泛化(generalization)的概念。它的意思是,相比于直接实现一个想法,你更乐意试着寻找一个更通用的概念,使得前者只是一个隐含的特例。这种方法的优点是,假若将来又遇到另一个特例,你不必重新实现之,至少不必全部推到重来。
传统的程序员从未面对过泛化问题,最多只是面向对象中的“抽象”概念而已。程序员更喜欢具体、特化的概念,就像直白如“干活的工具(the tool for the job)”。不幸的是,这种态度仍然普遍存在。Monad的概念就是一个尤其悲情的例子,虽然Monad极其有用,但是Hakell新手往往容易放弃深入理解它,因为Monad是个非常抽象的结构,使得在其基础之上实现的功能也处于一个难以置信的通用级别。
或许某些读者读过 Brent Yorgey 的 《抽象、直觉以及”Monad教程解谬“》\footnote{bstraction, intuition, and the ``monad tutorial fallacy'', \url{http://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/}},文中清楚地阐明,向Haskell新手提供Monad的又一种解释为何总是于事无补。环顾所有,我将上述问题视为一个额外的麻烦:虽然掌握了抽象概念后会带来诸多便利,但很多人都试图抵制它们。因此,这份教程中我的主要意图便是帮助读者击败对抽象概念的恐惧,并阐明Monad的本质:它不过是计算组合的一种风格的抽象而已。
我希望这篇文章能够给予你帮助,若有任何建设性的反馈,我将非常感谢。