阅读和学习的好 Haskell 源 [关闭]
Posted
技术标签:
【中文标题】阅读和学习的好 Haskell 源 [关闭]【英文标题】:Good Haskell source to read and learn from [closed] 【发布时间】:2011-09-17 22:41:27 【问题描述】:有哪些开源程序使用 Haskell 并且可以被认为是高质量的现代 Haskell?代码库越大越好。
我想从他们的源代码中学习。我觉得我已经过了从小代码示例中学习的点,这些示例通常是深奥的和小世界的。我想看看代码是如何结构化的,当你有很多事情(日志记录、I/O、配置等)时,monads 是如何交互的。
【问题讨论】:
即使此问题已关闭,用户仍然可以编辑“已接受”的答案并添加他们的答案。 【参考方案1】:我的推荐。
阅读 1990 年代不同研究生院的人编写的代码
Oxford style Glasgow style 或 (this) Chalmers style(或this) York style Portland style 或 OGI style(或 this) Utrecht style Yale style 特殊情况:CMU/Elliott阅读老大师某些人的代码(不完整列表)
请注意,像我、Coutts、Mitchell、O'Sullivan、Lynagh 等人从这些人那里学到了我们的 Haskell 风格。
阅读一些应用程序
阅读 GHC base library source 阅读xmonad source【讨论】:
这是典型的haskell damit。使用 php,您可以阅读一个 hello world,然后继续编写糟糕的网站。使用 haskell,您可以学习的内容没有上限,总会有更多有趣的扩展和论文出现。刚刚我了解到大学有不同的风格,因此我必须检查所有这些......我什么时候有时间真正编写自己的haskell项目? :) 简而言之,不同风格的特点是什么? @grautur:更重要的是,它们为什么不同?有充分的技术原因吗? 在我看来,不同的风格是前维基/互联网时代不同学派地理分离(有时是哲学分歧)的结果;以及影响风格的每所学校的原始 Haskell 语言的遗产。随着 Hackage、wikis 和 github 的出现,现在基本上是同质的 Haskell 风格(基于 Glasgow 和 GHC 的使用)。 在 CMU,我学习了指称语义和程序派生(规范到实现的系统转换),这两者都对我的编程方法产生了深远的影响。您会在my blog 上定期看到这两个主题。当我在软件库上工作时,我会选择少数类型并从一个中心问题开始:“它是什么意思?”。当我看到低级代码时,例如命令式/IO
,我会问“这段代码的实现是什么外延抽象,该实现如何从抽象派生?”【参考方案2】:
如果您关心 Web 编程,我会推荐 Chris Done 的 lpaste 项目。
【讨论】:
也许这个github.com/lpaste/lambda-paste?【参考方案3】:Yesod Web Platform 的源代码相当复杂,经过深思熟虑,并且写得很好。您还将从它附带的持久性库中学到很多东西。
【讨论】:
【参考方案4】:Darcs 是一个开源的源代码管理系统。它应该会给你一个 Haskell 的好主意。
【讨论】:
在 darcs 上工作过不少,我不会真的推荐它的源代码。它没有使用我认为好的 Haskell 样式。我想如果你好奇当小代码库在有机增长的同时变大时会发生什么,那么这是一个很好的例子。如果你想看到一个具有一致的写作风格或明确的设计目标的程序,我会去别处看看。【参考方案5】:Haskell: Functional Programming with Types
乔里·范·埃克伦等人。 |维基书 2007年出版,290页
Learn You a Haskell for Great Good!
米兰利波瓦卡 | LearnYouaHaskell.com 2010年出版,176页
Real World Haskell
B.奥沙利文、J. Goerzen、D. Stewart |奥莱利媒体公司 2008年出版,710页
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 核心的制作上比我参与的任何项目都更加小心。以上是关于阅读和学习的好 Haskell 源 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
学习惯用 Haskell 的资源(eta 缩减、符号中缀运算符、库等)[关闭]
常见的 Haskell 运算符是不是有可发音的名称? [关闭]