好的Haskell来源,可以阅读和学习。


347

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

我想从他们的源代码中学习。我觉得我已经无法从小型代码示例中学习了,这些示例通常是深奥的和小型的。我想看一下代码的结构,当发生许多事情(日志记录,I / O,配置等)时,monad如何交互。


9
即使这个问题已经解决,用户仍然可以编辑“接受的”答案并将其添加到答案中。
乔治·斯托克

Answers:


276

我的建议。

在1990年代读不同研究生院的人的代码

老主人读某些人的代码(不完整列表)

请注意,像我这样的人,库茨(Coutts),米切尔(Mitchell),奥沙利文(O'Sullivan),琳娜(Lynagh)等人都是从这些人那里学到我们的Haskell风格的。

阅读一些应用


98
这是典型的haskell damit。使用php,您可以阅读世界,并直接撰写可怜的网站。使用haskell,您可以学到的东西没有上限,总是会有更多有趣的扩展和论文来。现在我才知道大学风格各异,因此我必须检查所有这些……我什么时候有时间实际编写自己的haskell项目?:)
Tarrasch

39
简而言之,不同风格的特征是什么?
grautur 2011年

17
@grautur:而且,更重要的是,它们为什么不同?有好的技术原因吗?
罗伯特·马赛利

10
在我看来,不同的风格是前Wiki /互联网时代不同学校地理分离(有时是哲学上的分歧)的结果。以及每所学校的原始Haskell语言所带来的影响力。随着Hackage,Wiki和github的出现,现在基本上有了一种统一的Haskell风格(基于格拉斯哥和GHC的使用)。
唐·斯图尔特

15
在CMU,我学习了指称语义和程序派生(规范到实现的系统转换),这两者都对我的编程方法产生了深远的影响。您会在我的博客中定期看到这两个主题。当我在软件库上工作时,我会选择少量类型并从一个中心问题开始:“这是什么意思?”。当我看到低级代码(例如imperative /)时IO,我会问“该代码是什么表示抽象的实现,以及该实现如何从抽象中派生出来?”
康那,

61

XMonad是一个开源的切片窗口管理器,最初是在dwm上进行松散建模的。有很多扩展,质量各不相同,但核心是紧凑且组织良好的。


36
fwiw的核心也经过精心设计。核心的核心StackSet已在Coq定理证明者中得到验证(即QC属性成立)。这是病理设计护理的一个例子。
唐·斯图尔特

6
@don:“病态”与“好”一样,不是吗?:)
Francesco

8
是:-)斯宾塞,我把更多的照顾到比我已经参与了所有项目的核心xmonad的各具特色。
唐·斯图尔特

18
  1. Haskell: Functional Programming with Types

    Joeri van Eekelen等。| Wikibooks于2007年出版,共290页

  2. Learn You a Haskell for Great Good!

    Miran Lipovaca | LearnYouaHaskell.com 2010年出版,176页

  3. Real World Haskell

    B. O'Sullivan,J。Goerzen,D。Stewart | O'Reilly Media,Inc. 2008年出版,共710页

  4. The Haskell Road to Logic, Maths and Programming

    Kees Doets,Jan van Eijck | 高校出版物2004年出版,449页


6
这些是书,不是真实项目的源文件。
ses 2014年

17

Darcs是一个开源的源代码管理系统。对于Haskell,它应该给您一个不错的主意。


16
在darcs上做了相当多的工作后,我真的不推荐它的源代码。它没有使用我认为好的Haskell样式。我想如果您很好奇,当小型代码库自然增长时会发生什么,那么这就是一个很好的例子。如果您希望看到一个具有一致的写作风格或清晰的设计目标的程序,我可以在其他地方查找。
詹森·达吉特



5

GHC可能是Haskell编写的最大的或最大的开源项目之一。当我说最大的时候,我不仅要指来源的大小,还指影响,使用,创新和稳健性。GHC可以教给您很多有关编写Haskell的知识。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.