【问题标题】:Good Haskell source to read and learn from [closed]阅读和学习的好 Haskell 源 [关闭]
【发布时间】:2011-09-17 22:41:27
【问题描述】:

有哪些开源程序使用 Haskell 并且可以被认为是高质量的现代 Haskell?代码库越大越好。

我想从他们的源代码中学习。我觉得我已经过了从小代码示例中学习的点,这些示例通常是深奥的和小世界的。我想看看代码是如何结构化的,当你有很多事情(日志记录、I/O、配置等)时,monads 是如何交互的。

【问题讨论】:

  • 即使此问题已关闭,用户仍然可以编辑“已接受”的答案并添加他们的答案。

标签: haskell coding-style open-source


【解决方案1】:

我的推荐。

阅读 1990 年代不同研究生院的人编写的代码

阅读老大师某些人的代码(不完整列表)

请注意,像我、Coutts、Mitchell、O'Sullivan、Lynagh 等人从这些人那里学到了我们的 Haskell 风格。

阅读一些应用程序

【讨论】:

  • 这是典型的haskell damit。使用 php,您可以阅读一个 hello world,然后继续编写糟糕的网站。使用 haskell,您可以学习的内容没有上限,总会有更多有趣的扩展和论文出现。刚刚我了解到大学有不同的风格,因此我必须检查所有这些......我什么时候有时间真正编写自己的haskell项目? :)
  • 简而言之,不同风格的特点是什么?
  • @grautur:更重要的是,它们为什么不同?有充分的技术原因吗?
  • 在我看来,不同的风格是前维基/互联网时代不同学派地理分离(有时是哲学分歧)的结果;以及影响风格的每所学校的原始 Haskell 语言的遗产。随着 Hackage、wikis 和 github 的出现,现在基本上是同质的 Haskell 风格(基于 Glasgow 和 GHC 的使用)。
  • 在 CMU,我学习了指称语义和程序派生(规范到实现的系统转换),这两者都对我的编程方法产生了深远的影响。您会在my blog 上定期看到这两个主题。当我在软件库上工作时,我会选择少数类型并从一个中心问题开始:“它是什么意思?”。当我看到低级代码时,例如命令式/IO,我会问“这段代码的实现是什么外延抽象,该实现如何从抽象派生?”
【解决方案2】:

如果您关心 Web 编程,我会推荐 Chris Done 的 lpaste 项目。

【讨论】:

【解决方案3】:

Yesod Web Platform 的源代码相当复杂,经过深思熟虑,并且写得很好。您还将从它附带的持久性库中学到很多东西。

【讨论】:

    【解决方案4】:

    Darcs 是一个开源的源代码管理系统。它应该会给你一个 Haskell 的好主意。

    【讨论】:

    • 在 darcs 上工作过不少,我不会真的推荐它的源代码。它没有使用我认为好的 Haskell 样式。我想如果你好奇当小代码库在有机增长的同时变大时会发生什么,那么这是一个很好的例子。如果你想看到一个具有一致的写作风格或明确的设计目标的程序,我会去别处看看。
    【解决方案5】:
    1. Haskell: Functional Programming with Types

      乔里·范·埃克伦等人。 |维基书 2007年出版,290页

    2. Learn You a Haskell for Great Good!

      米兰利波瓦卡 | LearnYouaHaskell.com 2010年出版,176页

    3. Real World Haskell

      B.奥沙利文、J. Goerzen、D. Stewart |奥莱利媒体公司 2008年出版,710页

    4. The Haskell Road to Logic, Maths and Programming

      Kees Doets, Jan van Eijck |大学刊物 2004年出版,449页

    【讨论】:

    • 这些是书籍,不是真正的项目源文件。
    【解决方案6】:

    GHC 可能是用 Haskell 编写的最大或最大的开源项目之一。当我说最大时,我不仅仅指来源规模,还包括影响、使用、创新、稳健性。 GHC 可以教你很多关于编写 Haskell 的知识。

    【讨论】:

      【解决方案7】:

      XMonad 是一个开源平铺窗口管理器,最初松散地模仿dwm。有很多扩展,质量参差不齐,但 core 紧凑且组织良好。

      【讨论】:

      • 核心 fwiw 也经过精心设计。核心的核心 StackSet 已在 Coq 定理证明器中得到验证(即 QC 属性成立)。这是病态设计护理的一个例子。
      • @don:“病态”就像“好”一样,不是吗? :)
      • 是的 :-) Spencer 和我在 xmonad 核心的制作上比我参与的任何项目都更加小心。
      猜你喜欢
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2010-11-20
      • 2010-11-25
      • 1970-01-01
      • 2012-07-15
      • 2015-11-03
      • 2011-07-08
      相关资源
      最近更新 更多