Haskell 占位符

在刚开始进行 Haskell 开发的时候,通常需要面对大量崭新、不熟悉的概念,要一次性完成程序的编写,并顺利通过编译器检查,难度非常的高。

在每次完成一个功能点时,花几分钟停下来,对程序进行编译,是非常有益的:因为 Haskell 是强类型语言,如果程序能成功通过编译,那么说明程序和我们预想中的目标相去不远。

编写函数和类型的占位符(placeholder)版本,对于快速原型开发非常有效。举个例子,前文断言, string 、 text 和 double 函数都由 Prettify 模块提供,如果 Prettify 模块里不定义这些函数,或者不定义 Doc 类型,那么对程序的编译就会失败,我们的“早编译,常编译”战术就没有办法施展。通过编写占位符代码,可以避免这些问题:

复制代码
-- file: ch05/PrettyStub.hs
import SimpleJSON

data Doc = ToBeDefined
         deriving (Show)

 string :: String -> Doc
 string str = undefined

 text :: String -> Doc
 text str = undefined

 double :: Double -> Doc
 double num = undefined
复制代码

特殊值 undefined 的类型为 a ,因此它可以让代码顺利通过类型检查。因为它只是一个占位符,没有什么实际作用,所以对它进行求值只会产生错误:

复制代码
*Main> :type undefined
undefined :: a

*Main> undefined
*** Exception: Prelude.undefined

*Main> :load PrettyStub.hs
[2 of 2] Compiling Main             ( PrettyStub.hs, interpreted )
Ok, modules loaded: Main, SimpleJSON.

*Main> :type double
double :: Double -> Doc

*Main> double 3.14
*** Exception: Prelude.undefined
复制代码

尽管程序里还没有任何实际可执行的代码,但是编译器的类型检查器可以保证程序中类型的正确性,这为接下来的进一步开发奠定了良好基础。

posted @   Gyoung  阅读(235)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示