识字的Haskell(.lhs)和Haddock
目前我只使用哈多克,但在看到一些非常有趣的例子(如这个要点 )的Haskell,我有兴趣尝试一个项目。
我得到的问题是:
-
你写什么作为哈多克评论,你在文学部分写什么?
-
如何将文学编程扩展到多个文件? 任何人都可以指出一个例子,在多个模块的包中使用literate编程吗? 在大型软件包中使用文字编程的经验是什么?
-
识字Haskell的哪种风味(降价,乳胶,…)是首选?
-
你为什么编程识字的Haskell或简单的香草Haskell? 你是在两种风格编程,如果是的话,为什么?
-
你喜欢块式(
\begin{code}
)还是Bird式(>
)? 为什么?
我曾经写过很多有识字的程序 。
你写什么作为哈多克的评论,你在文学部分写什么?
外部API文档进入了Haddock的评论。 其他一切都进入文学的一部分。 “其他”可能包括:
- 数据结构的内部不variables
- 你为什么这样做
- 代码的devise是什么
- 为什么select这个devise,还有什么其他的devise被尝试和发现想要的
如何将文学编程扩展到多个文件?
与将大型LaTeX文档扩展为多个文件的方式相同:每个模块一个文件,然后是一个\include
所有文件的巨大文件。
任何人都可以指出一个例子,在多个模块的包中使用literate编程吗?
这不是Haskell,但Quick C–编译器是一个使用文字编程编写的大型函数程序。
在大型软件包中使用文字编程的经验是什么?
文字编程非常适合logging棘手,困难或复杂的模块。 对于大多数简单的模块来说,外部API文档(如Haddock)就足够了。 没有文学课程真的会给你一个包含十几个模块的devise的全貌。 为此你需要其他工具和技术。
识字Haskell的哪种风味(降价,乳胶,…)是首选?
如果你做了这么大的投资,我肯定会selectLaTeX,只是因为它的math能力和这个工具的强大function。
你为什么编程识字的Haskell或简单的香草Haskell? 你是在两种风格编程,如果是的话,为什么?
我的Haskell代码几乎总是普通的香草,原因有两个:
-
我和那些Haskell经验丰富的老人一起工作,他们已经放弃了Haskell文学。 只有系统中最老的模块才有可能成为.lhs。
-
对于Haskell来说,文学编程是多余的。 文学编程工具的一大优点是,您可以摆脱编译器或语言定义可能影响代码出现顺序的限制。 但Haskell几乎没有这样的约束:在使用前没有定义,对于典型的函数定义,我可以select
let
-binding或where
-binding辅助名(或两者兼有)。 文学编程从来不仅仅是一些精彩的评论,而且“文学”的Haskell就是你所能得到的。 这是不值得的。
你喜欢块式(\ begin {code})还是Bird式(>)? 为什么?
我强烈喜欢块风格:
-
这大概与这个星球上所有其他文学编程工具兼容。 (鸟的轨道是哈斯克尔独有的。)
-
我的编辑更好地处理块的风格。
如果你打算在互联网上分享节目,我发现在markdown风格与mathjax文字haskell组合是一个很好的组合。 “Pandoc”程序对于将“markdown + lhs”转换为您所需的任何格式(包括PDF或HTML)都是非常出色的。 如果您告诉Pandoc输出为HTML,则可以使用-mathjax(或者其他类似的标志,如果您愿意的话)来使您的乳胶math公式呈现。
使用这种风格时,我觉得鸟类风格是可取的,因为它只是更易于阅读,似乎更适合与减价风格。
使用Pandoc降价的好处在于,您可以将引文添加到您的代码,math公式中,并且具有非常便携的格式。 你可以build立类似于科学研究论文但是可执行的东西,也可以发布到博客/维基/网站。
为了给诺曼提供一个替代的观点,他说文学编程对于更清晰的代码安排是有用的,可以认为哈斯克尔是足够expression的,你用代码解决的问题实际上是有趣的,并且可以通过被解释性文本。 想想一个math研究论文。 纯math中的好文章有很多文字来解释math符号的意义的动机或更高级的解释。 例如,在一篇关于Navier-Stokes方程的文章中,围绕方程式的记号,用文字说明它如何与牛顿的动量守恒相关将是非常有用的。
总而言之,我曾经使用markdown + lhs风格,美元符号来embedded乳胶math公式,鸟类风格和pandoc,并取得了很好的成绩。 我会build议编写程序,就好像他们是研究论文一样,在研究论文中将mathexpression式视为haskell本身。