什么是Haskell实际上有用的?

例如,如果我开始学习Haskell,我可以find自己使用它。 我听说这种语言的一些常见用途是function性的吗?

这种语言的一些常见用途是什么?

快速应用程序开发

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

  • function程序往往比他们的强制性语言同行更为简洁。 通常这会导致程序员生产力的提高

  • FP鼓励快速成型。 因此,我认为这是ExtremeProgrammers的最佳软件devise范例…但是我知道什么?

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

  • 有蛋糕和吃它的能力。 想象一下,你有一个复杂的OO系统处理消息 – 每个组件可能会根据消息进行状态更改,然后将消息转发给它所链接的某些对象。 如果调用层次中的某个对象决定了这个信息是有缺陷的,那么如果能够轻松地回滚每一个变化,是不是太酷了? 如何有不同的国家的历史?

  • (PatternMatching),存储variables绑定(带闭包的LexicalScope),强types(TypeInference),GarbageCollection,存储分配,是直接使用boxed(指针指针)还是unboxed )代表…

  • 安全的multithreading! 不可变的数据结构不受数据竞争条件的限制,因此不必受锁保护。 如果您始终分配新对象,而不是破坏性地操作现有对象,那么locking可以隐藏在分配和GarbageCollection系统中。

除此之外,Haskell还有其自身的优势,如:

  • 清晰直观的语法灵感来自math符号。
  • 列出parsing以基于现有列表创build列表。
  • Lambdaexpression式:创build函数而不给它们显式名称。 所以处理大公式更容易。
  • 哈斯克尔是完全透明的 。 任何使用I / O的代码都必须标记为这样。 这样,它鼓励你从没有(计算)的代码中分离带有副作用的代码(例如把文本放在屏幕上)。
  • 懒惰评估是一个非常好的function:
    • 即使有些东西通常会导致错误,但只要您不使用结果,它仍然会工作。 例如,你可以把1 / 0作为列表中的第一项,如果你只使用第二项,它仍然可以工作。
    • 编写search程序比如这个数独求解器更容易,因为它不会一次加载所有的组合,而是随着它一起生成它们。 你可以在其他语言中做到这一点,但只有Haskell 默认这样做

您可以查看以下链接:

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

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

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

  • Haskell库和应用程序区域的标签云 ,由Hackage上的频率加权。

表示它适合graphics,networking,系统编程,数据结构,数据库,开发,文本处理…

  • 它在工业中使用的领域 – 大量的DSL,networking应用程序,编译器devise,networking,分析,系统编程…

最后,我认为它真的很强大:

  • 正确性问题,领域特定语言,并行和并发编程

我希望能够给你一个关于你的问题有多广泛的意义,如果是以特殊的方式来回答的话。

Haskell的一个例子就是xmonad ,它是一个“less于1200行代码的特殊窗口pipe理器”。

来自Haskell Wiki :

Haskell在航空航天和国防,金融,networking创业公司,硬件devise公司和割草机制造商等领域具有广泛的商业用途。 这个页面收集了Haskell工业使用的资源。

根据维基百科的说法, Haskell语言的出现是为了将现有的function语言整合到一个共同的function语言中,以用于未来的function语言devise研究。

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

如果你还在问自己,“为什么要用它?”,然后阅读为什么要使用它? Haskell Wiki简介部分。

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

是的,我是Dreamincode的Rayne。 🙂

我还想提一下,如果你还没有阅读Wikipedia页面,函数式编程就是一个范例,像面向对象编程就是一个范例。 以防万一你不知道。 Haskell在其工作的意义上也是function性的; 它在这方面效果很好。

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

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

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

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

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

我们使用haskell来制作特定于领域的小语言。 大量的数据处理。 Web开发。 networking蜘蛛。 testing应用程序 编写系统pipe理脚本。 后端脚本,与其他方通信。 监控脚本(我们有一个与munin一起工作良好的DSL,使得为您的应用程序编写正确的监控代码变得更容易)。

实际上所有的东西。 这只是一个日常的通用语言,如果你有一些math上的倾向,那么它就具有一些非常强大和有用的特性。

来自Haskell :

Haskell是一个标准化,通用的纯函数式编程语言 ,具有非严格的语义和强大的静态types。 它以逻辑学家Haskell Curry命名。

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

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

这是有关Haskell及其用途的相当好的资源:

开源的Haskell发布和增长