有很多关于Haskell的宣传,然而,很难获得关于它如何在现实应用程序中使用的信息。Haskell最流行的项目/用法是什么?为什么它能出色地解决这些问题?


当前回答

这是一个非常好的关于Haskell及其用途的信息来源:

开源Haskell发布和增长

其他回答

Haskell的一个例子是xmonad,一个“用不到1200行代码的功能强大的窗口管理器”。

例如,用于开发交互式、实时的HTML5 web应用程序。参见Elm,它的编译器是用Haskell实现的,其语法大量借鉴了Haskell的语法。

我有一个很酷的,facebook创建了一个自动重写PHP代码的工具。他们把源代码解析成一个抽象的语法树,做一些转换:

if ($f == false) -> if (false == $f)

我不知道为什么,但这似乎是他们的特殊风格,然后他们漂亮地印刷它。

https://github.com/facebook/lex-pass

我们使用haskell来创建小型的领域特定语言。大量的数据处理。Web开发。网络蜘蛛。测试应用程序。编写系统管理脚本。后端脚本,用于与其他方通信。监视脚本(我们有一个DSL,它可以很好地与munin一起工作,使它更容易为应用程序编写正确的监视代码)。

实际上是各种各样的东西。它只是一种日常通用语言,具有一些非常强大和有用的特性,如果你有点数学倾向的话。

它的一些常见用途是什么 语言吗?

快速应用程序开发。

如果你想知道“为什么是Haskell?”,那么你需要考虑函数式编程语言的优势(摘自https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming):)

Functional programs tend to be much more terse than their ImperativeLanguage counterparts. Often this leads to enhanced programmer productivity FP encourages quick prototyping. As such, I think it is the best software design paradigm for ExtremeProgrammers... but what do I know? FP is modular in the dimension of functionality, where ObjectOrientedProgramming is modular in the dimension of different components. The ability to have your cake and eat it. Imagine you have a complex OO system processing messages - every component might make state changes depending on the message and then forward the message to some objects it has links to. Wouldn't it be just too cool to be able to easily roll back every change if some object deep in the call hierarchy decided the message is flawed? How about having a history of different states? Many housekeeping tasks made for you: deconstructing data structures (PatternMatching), storing variable bindings (LexicalScope with closures), strong typing (TypeInference), GarbageCollection, storage allocation, whether to use boxed (pointer-to-value) or unboxed (value directly) representation... Safe multithreading! Immutable data structures are not subject to data race conditions, and consequently don't have to be protected by locks. If you are always allocating new objects, rather than destructively manipulating existing ones, the locking can be hidden in the allocation and GarbageCollection system.

除此之外,Haskell还有自己的优势,比如:

Clear, intuitive syntax inspired by mathematical notation. List comprehensions to create a list based on existing lists. Lambda expressions: create functions without giving them explicit names. So it's easier to handle big formulas. Haskell is completely referentially transparent. Any code that uses I/O must be marked as such. This way, it encourages you to separate code with side effects (e.g. putting text on the screen) from code without (calculations). Lazy evaluation is a really nice feature: Even if something would usually cause an error, it will still work as long as you don't use the result. For example, you could put 1 / 0 as the first item of a list and it will still work if you only used the second item. It is easier to write search programs such as this sudoku solver because it doesn't load every combination at once—it just generates them as it goes along. You can do this in other languages, but only Haskell does this by default.

你可以查看以下连结:

https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming https://learn.microsoft.com/archive/blogs/wesdyer/why-functional-programming-is-important-in-a-mixed-environment https://web.archive.org/web/20160626145828/http://blog.kickino.org/archives/2007/05/22/T22_34_16/ https://useless-factor.blogspot.com/2007/05/advantage-of-functional-programming.html

这是一个非常好的关于Haskell及其用途的信息来源:

开源Haskell发布和增长