【问题标题】:Literate Haskell (.lhs) and Haddock识字的 Haskell (.lhs) 和黑线鳕
【发布时间】:2010-04-25 08:39:05
【问题描述】:

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

我得到的问题是:

  • 作为 Haddock cmets,你会写什么?在识字部分你会写什么?

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

  • 文学 Haskell 的哪种风格(markdown、latex、...)是首选?

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

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

【问题讨论】:

  • 你能在 Literate Haskell 代码中使用 Latex 数学公式吗?如何?如果是的话

标签: haskell literate-programming haddock


【解决方案1】:

我以前写过很多literate programs

作为 Haddock cmets,你会写什么?在识字部分你会写什么?

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

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

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

与将大型 LaTeX 文档缩放为多个文件的方式相同:每个模块一个文件,然后是一个巨大的文件,\includes 全部。

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

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

您在大型软件包中使用文学编程有什么经验?

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

文学 Haskell 的哪种风格(markdown、latex、...)是首选?

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

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

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

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

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

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

我非常喜欢块样式:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 您有可以分享的以这种风格编写的文件示例吗?
    • LHS and Markdown 讲述了更多关于在网络上分享/发布.lhs 的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多