Haskell在现实世界中使用的是什么?

时间:2009-10-22 03:00:38

标签: haskell functional-programming programming-languages

围绕Haskell有很多炒作,然而,很难获得有关如何在现实世界的应用程序中使用它的信息。 Haskell最受欢迎的项目/用途是什么?为什么它擅长解决这些问题?

10 个答案:

答案 0 :(得分:294)

  

这有什么常见的用途   语言

快速应用程序开发。

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

  
      
  • 功能性课程往往比他们的ImperativeLanguage同行更简洁。通常这会导致增强   程序员生产力

  •   
  • FP鼓励快速原型设计。因此,我认为它是ExtremeProgrammers最好的软件设计范例......但我知道什么?

  •   
  • FP在功能方面是模块化的,其中ObjectOrientedProgramming在不同维度上是模块化的   组件。

  •   
  • 吃蛋糕的能力。想象一下,你有一个复杂的OO系统处理消息 - 每个组件都可以创建状态   根据消息进行更改,然后将消息转发给某些消息   它有链接的对象。是不是太酷了能够   如果某个对象在通话深处,则可以轻松回滚每个更改   层次结构决定了消息有缺陷?怎么样有历史   不同的州?

  •   
  • 为您做的许多内务处理任务:解构数据结构(PatternMatching),存储变量绑定(LexicalScope with   闭包),强类型(TypeInference),GarbageCollection,存储   分配,是否使用盒装(指向值)或未装箱(值   直接)代表...

  •   
  • 安全的多线程!不可变数据结构不受数据竞争条件的影响,因此不必受到保护   锁。如果你总是分配新的对象,而不是   破坏性地操纵现有的,可以隐藏锁定   分配和GarbageCollection系统。

  •   

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

  • 以数学符号为灵感的清晰,直观的语法。
  • 列出理解以根据现有列表创建列表。
  • Lambda表达式:创建函数而不给它们显式名称。所以处理大公式更容易。
  • Haskell完全是referentially transparent。任何使用I / O的代码都必须标记为这样。这样,它鼓励您在没有(计算)的情况下将代码与副作用(例如在屏幕上放置文本)分开。
  • 懒惰评估是一个非常好的功能:
    • 即使某些内容通常会导致错误,只要您不使用结果,它仍会有效。例如,您可以将1 / 0作为列表的第一项,如果您仅使用第二项,它仍然有效。
    • 编写诸如此sudoku solver之类的搜索程序更容易,因为它不会立即加载每个组合 - 它只是随着它一起生成它们。您可以使用其他语言执行此操作,但只有Haskell默认执行

您可以查看以下链接:

答案 1 :(得分:217)

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

答案 2 :(得分:82)

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

对于实际使用的内容,我有三种方法来确定:

表示它适用于图形,网络,系统编程,数据结构,数据库,开发,文本处理...

最后,我对其真正强大的看法:

我希望能让你了解你的问题有多广泛,如果要以任何特异性回答它。

答案 3 :(得分:29)

Haskell实际应用的一个例子是xmonad,一个“少于1200行代码的特色窗口管理器”。

答案 4 :(得分:18)

来自the Haskell Wiki

  

Haskell具有多种用途   来自航空航天和航空航天   防御,融资,网络初创公司,   硬件设计公司和割草机   制造商。此页面收集   关于工业用途的资源   Haskell中。

根据维基百科的说法,Haskell语言的出现是因为需要将现有的功能语言合并为一个可用于未来功能语言设计研究的常用语言。

根据可获得的信息显而易见,它已经超出了它的原始目的,并且不仅仅用于研究。它现在被认为是一种通用的函数式编程语言。

如果您仍在问自己,“我为什么要使用它?”,请阅读Haskell Wiki简介的Why use it?部分。

答案 5 :(得分:13)

Haskell是一种通用编程语言。它可以用于您使用任何其他语言的任何事情。除了自己的想象力,你不受任何限制。至于它适合什么?好吧,几乎所有的东西。功能语言不能胜任的任务很少。

是的,我是来自Dreamincode的Rayne。 :)

我还想提一下,如果您还没有阅读维基百科页面,函数式编程就像面向对象编程这样的范例就是一种范式。以防你不知道。 Haskell在它工作的意义上也是有用的;它的效果非常好。

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

答案 6 :(得分:9)

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

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

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

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

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

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

答案 7 :(得分:6)

来自Haskell

  

Haskell是一种 标准化,通用的纯功能   编程语言 ,有   非严格的语义和强大的静态   打字。它以逻辑学家的名字命名   哈斯克尔库里。

基本上,Haskell可用于创建通常使用其他通用语言创建的任何内容(例如C#,Java,C,C ++等)。

答案 8 :(得分:5)

例如,用于开发交互式实时HTML5 Web应用程序。参见Elm,其编译器在Haskell中实现,其语法从Haskell中借用了很多。

答案 9 :(得分:3)

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

Open Source Haskell Releases and Growth