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
尽管程序里还没有任何实际可执行的代码,但是编译器的类型检查器可以保证程序中类型的正确性,这为接下来的进一步开发奠定了良好基础。
如果我的文章对你有帮助,就点一下推荐吧.(*^__^*)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步