有很多关于Haskell的宣传,然而,很难获得关于它如何在现实应用程序中使用的信息。Haskell最流行的项目/用法是什么?为什么它能出色地解决这些问题?
当前回答
它的一些常见用途是什么 语言吗?
快速应用程序开发。
如果你想知道“为什么是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 Wiki:
Haskell有多种用途 商业上,从航空航天和 国防,金融,网络创业, 硬件设计公司和割草机 制造商。本页收集 资源在工业上的利用 Haskell。
根据维基百科的说法,Haskell语言的创建是为了将现有的函数式语言整合为一种通用的语言,以供将来在函数式语言设计方面的研究使用。
根据现有的信息,很明显,它已经超出了它最初的目的,被用于远远超过研究。它现在被认为是一种通用函数式编程语言。
如果你还在问自己:“我为什么要用它?”,那就读读《为什么要用它?》Haskell Wiki简介的一部分。
例如,用于开发交互式、实时的HTML5 web应用程序。参见Elm,它的编译器是用Haskell实现的,其语法大量借鉴了Haskell的语法。
我认为,对于从未使用过函数式编程语言的人来说,这篇文章中的人忽略了最重要的一点:扩展你的思维。如果你是函数式编程的新手,那么Haskell会让你以以前从未想过的方式思考。因此,您在其他领域和其他语言的编程将得到改进。多少钱?很难量化。
从Haskell:
Haskell是一个标准化的、通用的纯函数 编程语言,包括 语义不严格,静态强 打字。它以逻辑学家的名字命名 Haskell咖喱。
基本上,Haskell可以用来创建几乎任何你通常使用其他通用语言(例如c#, Java, C, c++等)创建的东西。
Haskell是一种通用编程语言。它可以用于任何你使用其他语言做的事情。除了你自己的想象力,你不受任何东西的限制。至于它适合做什么呢?嗯,几乎所有的事情。几乎没有什么任务是函数式语言不擅长的。
没错,我是Dreamincode的Rayne。:)
我还想提一下,如果你还没有阅读维基百科页面,函数式编程是一种范式,就像面向对象编程是一种范式一样。以防你不知道。Haskell在某种意义上也是功能性的;它在这方面做得很好。
仅仅因为一种语言不是面向对象的语言并不意味着该语言受到任何东西的限制。Haskell是一种通用编程语言,和Java一样通用。
推荐文章
- Haskell:将Int转换为字符串
- 我如何用groupBy计算发生的事件?
- 在函数式编程中,什么是函子?
- 流行语言的语言书籍/教程
- 面向对象编程,函数式编程,过程式编程
- 获取与模板Haskell关联的类型同义词
- Haskell:列表,数组,向量,序列
- 按返回类型重载函数?
- 推挽型FRP和箭头型FRP有什么本质区别?
- 为什么不可变性在JavaScript中如此重要(或需要)?
- Template Haskell有什么不好的?
- 如何使用underscore.js作为模板引擎?
- Scala中的“提升”是什么?
- Javascript相当于Python的zip函数
- 感叹号在Haskell声明中是什么意思?