关于函数式编程:Haskell在现实世界中使用的是什么?

What is Haskell used for in the real world?

但是,关于haskell有很多炒作,很难了解它在现实世界中的应用。Haskell最流行的项目/用法是什么?为什么它擅长解决这些问题?


What are some common uses for this
language?

快速的应用程序开发。

如果你想知道"为什么是哈斯克尔?",那么您需要考虑函数式编程语言的优势(摘自http://c2.com/cgi/wiki)?优点功能编程):

  • 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还有其自身的优势,如:

  • 受数学符号启发的清晰、直观的语法。
  • 基于现有列表创建列表的列表理解。
  • lambda表达式:创建函数而不给出显式名称。所以更容易处理大的公式。
  • haskell完全透明。任何使用I/O的代码都必须标记为这样。通过这种方式,它鼓励您将有副作用的代码(例如,将文本放在屏幕上)与没有副作用的代码(计算)分开。
  • 懒惰的评估是一个非常好的特性:
    • 即使某些事情通常会导致错误,只要不使用结果,它仍然可以工作。例如,可以将1 / 0作为列表的第一项,如果只使用第二项,它仍然可以工作。
    • 编写搜索程序(如这个数独解算器)更容易,因为它不会一次加载每个组合—它只是在执行过程中生成它们。您可以用其他语言执行此操作,但默认情况下只有haskell执行此操作。

您可以查看以下链接:

  • http://c2.com/cgi/wiki?功能性编程的优势
  • http://blogs.msdn.com/wesdyer/archive/2007/01/18/why-functional-programming-is-important-in-a-mixed-environment.aspx
  • http://blog.kickino.org/archives/2007/05/22/t22_34_16/
  • http://unuses-factor.blogspot.com/2007/05/advantage-of-functional-programming.html


我认为在这篇文章中,对于那些从未使用过函数式编程语言的人来说,最重要的一点是:拓展你的思维。如果你对函数式编程还不熟悉,那么Haskell会让你以你以前从未想过的方式思考。因此,您在其他领域和其他语言中的编程将得到改进。多少钱?难以量化。


对于像haskell这样的通用语言有一个很好的答案:一般地编写程序。

对于它在实践中的用途,我有三种方法来确定这一点:

  • haskell库和应用程序区域的标签云,根据黑客攻击的频率进行加权。

说明它适用于图形、网络、系统编程、数据结构、数据库、开发、文本处理…

  • 它在工业中的应用领域——许多DSL、Web应用程序、编译器设计、网络、分析、系统编程等等。

最后,我对它真正强大之处的看法是:

  • 正确性很重要的问题、特定于领域的语言以及并行和并发编程

我希望这能让你明白你的问题有多广泛,如果要用任何具体的方式来回答的话。


Haskell的一个例子是Xmonad,一个"功能强大的窗口管理器,代码少于1200行"。


从haskell wiki:

Haskell has a diverse range of use
commercially, from aerospace and
defense, to finance, to web startups,
hardware design firms and lawnmower
manufacturers. This page collects
resources on the industrial use of
Haskell.

根据维基百科的说法,haskell语言是为了将现有的功能语言整合成一种通用语言而创建的,这种通用语言可用于未来的功能语言设计研究。

很明显,根据现有的信息,它已经超出了它原来的用途,并被用于远远超过研究。它现在被认为是一种通用的函数式编程语言。

如果你还在问自己,"我为什么要用它?",然后阅读为什么要使用它?haskell wiki简介部分。


haskell是一种通用的编程语言。它可以用来做任何你用其他语言做的事情。除了你自己的想象力,你什么都不受限制。至于它适合做什么?嗯,几乎所有的事情。很少有功能语言不擅长的任务。

是的,我是DreamIncode的雷恩。:)

我还想说,如果您还没有阅读过维基百科的页面,那么函数式编程就是一种范例,就像面向对象编程是一种范例一样。以防万一你不知道。haskell在工作的意义上也是功能性的;它在这方面工作得很好。

仅仅因为语言不是面向对象的语言并不意味着语言受到任何限制。Haskell是一种通用编程语言,它和Java一样通用。


我有一个很酷的例子,Facebook为重写PHP代码创建了一个自动化工具。它们将源代码解析为抽象语法树,进行一些转换:

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

我不知道为什么,但这似乎是他们的独特风格,然后他们漂亮地打印出来。

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

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

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


从哈斯克尔:

Haskell is a standardized, general-purpose purely functional
programming language, with
non-strict semantics and strong static
typing. It is named after logician
Haskell Curry.

基本上,Haskell可以用来创建通常使用其他通用语言创建的任何东西(例如C语言、Java语言、C语言、C++语言等)。


例如,用于开发交互式实时HTML5 Web应用程序。参见ELM,它的编译器是用haskell实现的,它的语法从haskell中借用了很多。


这是有关haskell及其用途的非常好的信息来源:

开源haskell发布和增长