识字Haskell(.lhs)和Haddock

fin*_*son 38 haskell literate-programming haddock

目前我只使用Haddock,但在看到一些有文化的Haskell的一些非常有趣的例子(例如这个要点)之后,我有兴趣在一个项目中尝试它.

我得到的问题是:

  • 你怎么写Haddock评论,你在文学部分写什么?

  • 如何将识字编程扩展到多个文件?有人能指出我在一个包含多个模块的程序包中使用文字编程的例子吗?您在大型软件包中使用文字编程的经验是什么?

  • 有文化的Haskell的哪种口味(降价,乳胶,...)是首选?

  • 你为什么要用文字的Haskell或普通的Hillaell编程?你是在两种风格的编程,如果是这样,为什么?

  • 你喜欢block-style(\begin{code})还是Bird-style(>)?为什么?

Nor*_*sey 35

我曾经写过很多有文化的课程.

你怎么写Haddock评论,你在文学部分写什么?

外部API文档进入黑线鳕意见.其他一切都进入了文化部分."其他一切"可能包括:

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

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

将大型LaTeX文档扩展为多个文件的方式相同:每个模块一个文件,然后是一个巨大的文件\include.

有人能指出我在一个包含多个模块的程序包中使用文字编程的例子吗?

它不是Haskell,但Quick C--编译器是一个使用文字编程编写的大型功能程序.

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

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

有文化的Haskell的哪种口味(降价,乳胶,...)是首选?

如果您正在进行如此重大的投资,我肯定会因为数学能力以及该工具通常更强大的功能而使用LaTeX.

你为什么要用文字的Haskell或普通的Hillaell编程?你是在两种风格的编程,如果是这样,为什么?

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

  • 我与拥有更多Haskell经验的资深人士合作,他们已经放弃了文化的Haskell.只有系统中最古老的模块才有机会成为.lhs.

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

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

我更喜欢块样式:

  • 它与地球上所有其他文字编程工具大致兼容.(鸟轨道是Haskell独有的.)

  • 我的编辑器更适合使用块样式.


小智 11

如果你打算在互联网上分享节目,我发现在markdown风格和litejax的文字haskell组合是一个很好的组合."Pandoc"程序非常出色,可以将"markdown + lhs"带到您想要的任何格式,包括PDF或HTML.如果您告诉Pandoc输出到HTML,您可以使用-mathjax(或其他类似的标记,如果您愿意)来渲染乳胶数学公式.

使用这种风格时,我发现鸟类风格更受欢迎,因为它对我来说更具可读性,并且似乎更符合降价风格.

将Pandoc与markdown一起使用的好处在于,您可以为代码,数学公式添加引文,并且具有非常便携的格式.您可以构建类似于科学研究论文但可执行的内容,也可以发布到博客/维基/网站.

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

总之,我已经取得了很好的成功,并建议使用markdown + lhs风格,美元符号来嵌入乳胶数学公式,鸟类风格和pandoc.我建议编写程序就好像它们是研究论文一样,并像研究论文中的数学表达一样对待haskell本身.