41

目前我只使用 Haddock,但在看到一些真正有趣的 Haskell 示例(例如this gist)后,我有兴趣在项目中尝试它。

我得到的问题是:

  • 你写什么作为黑线鳕评论,你在文学部分写什么?

  • 您如何将文学编程扩展到多个文件?谁能给我举一个例子,在一个包含多个模块的包中使用文学编程?您在较大的软件包中使用文学编程的经验是什么?

  • 识字的 Haskell 的哪种口味(markdown、latex、...)是首选?

  • 你为什么要使用识字的 Haskell 或普通的 Haskell 编程?您是否同时使用这两种风格进行编程,如果是,为什么?

  • 你更喜欢块式(\begin{code})还是鸟式(>)?为什么?

4

2 回答 2

36

我以前写过很多识字的程序

你写什么作为黑线鳕评论,你在文学部分写什么?

外部 API 文档进入Haddock 注释。其他一切都进入识字部分。“其他一切”可能包括:

  • 数据结构的内部不变量
  • 为什么你这样做
  • 代码的设计是什么
  • 为什么选择这个设计,还有什么其他设计被尝试和发现想要

您如何将文学编程扩展到多个文件?

与将大型 LaTeX 文档缩放为多个文件的方式相同:每个模块一个文件,然后是一个包含\include所有文件的巨型文件。

谁能给我举一个例子,在一个包含多个模块的包中使用文学编程?

它不是 Haskell,而是Quick C-- 编译器是一个使用文学编程编写的大型函数式程序。

您在较大的软件包中使用文学编程的经验是什么?

文学编程非常适合记录棘手、困难或复杂的模块。对于大多数简单的模块,外部 API 文档(例如 Haddock)就足够了。没有一个有文化的程序真的会给你一个包含十几个模块的设计的大图。为此,您需要其他工具和技术。

识字的 Haskell 的哪种口味(markdown、latex、...)是首选?

如果您要进行如此重大的投资,我肯定会选择 LaTeX,因为它具有数学能力,而且该工具通常更强大。

你为什么要使用识字的 Haskell 或普通的 Haskell 编程?您是否同时使用这两种风格进行编程,如果是,为什么?

我的 Haskell 代码几乎都是普通的,原因有二:

  • 我和有更多 Haskell 经验的资深人士一起工作,他们已经放弃了有读写能力的 Haskell。只有系统中最古老的模块才有可能成为 .lhs。

  • 对于 Haskell 来说,文学编程是多余的。文学编程工具的一大好处是,您可以摆脱编译器或语言定义可能对您的代码出现顺序施加的任何约束。但是 Haskell 几乎没有这样的限制:使用前没有定义,对于典型的函数定义,我可以选择let-binding 或where-binding 辅助名称(或两者)。 识字编程绝不仅仅是花哨的评论,而“识字”的 Haskell 就是你所得到的一切。这不值得费心。

你更喜欢块式(\begin{code})还是鸟式(>)?为什么?

我非常喜欢块样式:

  • 它与地球上所有其他文学编程工具大致兼容。(鸟的足迹是 Haskell 独有的。)

  • 我的编辑器可以更好地处理块样式。

于 2010-04-25T19:42:39.027 回答
10

如果您打算在 Internet 上共享程序,我发现 Markdown 风格的 literate haskell 与 mathjax 的组合是一个很好的组合。“Pandoc”程序非常出色,可以将此“markdown+lhs”转换为您想要的任何格式,包括 PDF 或 HTML。如果您告诉 Pandoc 输出到 HTML,您可以使用 -mathjax(或其他类似的标志,如果您愿意)来渲染您的乳胶数学公式。

使用这种风格时,我发现鸟风格更可取,因为它对我来说更具可读性,并且似乎更适合 markdown 风格。

将 Pandoc 与 markdown 结合使用的好处在于,您可以在代码、数学公式中添加引用,并且具有真正可移植的格式。您可以构建类似于科学研究论文但可执行的内容,也可以发布到博客/维基/网站。

为了给 Norman 提供一个替代点,他说读写编程对于更清晰的代码排列很有用,可以说 Haskell 的表达能力足以让你用代码解决的问题实际上很有趣,并且可以通过被解释性文本包围而真正受益. 想想数学研究论文。纯数学方面的好论文有很多文字来解释数学符号的动机或更高层次的解释。例如,在一篇关于 Navier-Stokes 方程的论文中,在方程的符号周围加上解释它如何与牛顿的动量守恒相关的文本会非常有用。

总而言之,我在使用 markdown+lhs 样式、美元符号嵌入乳胶数学公式、bird 样式和 pandoc 方面取得了很好的成功,并推荐了它。我建议将程序编写为研究论文,并将 haskell 本身视为研究论文中的数学表达式。

于 2012-02-29T21:39:44.197 回答