Haskell 在现实世界中的用途是什么? [关闭]

2024-01-04

关于 Haskell 有很多炒作,但是,很难获得有关如何在现实世界应用程序中使用它的信息。 Haskell 最流行的项目/用法是什么?为什么它擅长解决这些问题?


这有哪些常见用途 语言?

快速的应用程序开发。

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

  • 函数式程序往往比命令式语言程序简洁得多。通常这会导致增强 程序员生产力

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

  • FP 在功能维度上是模块化的,而面向对象编程在不同维度上是模块化的 成分。

  • 鱼与熊掌兼得的能力。想象一下你有一个复杂的面向对象系统处理消息 - 每个组件都可能创建状态 根据消息进行更改,然后将消息转发给某些人 它有链接的对象。这不是太酷了吗? 如果某个对象深入调用,则可以轻松回滚每个更改 层次结构决定消息有缺陷吗?拥有以下历史怎么样 不同的州?

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

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

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

  • 受数学符号启发的清晰、直观的语法。
  • 列表推导式用于根据现有列表创建列表。
  • Lambda 表达式:创建函数而不给它们明确的名称。因此处理大公式更容易。
  • 哈斯克尔完全是参照透明 https://wiki.haskell.org/Referential_transparency。任何使用 I/O 的代码都必须如此标记。这样,它鼓励您将有副作用的代码(例如,在屏幕上放置文本)与没有副作用的代码(计算)分开。
  • Lazy evaluation is a really nice feature:
    • 即使某些事情通常会导致错误,只要您不使用结果,它仍然可以工作。例如,您可以将1 / 0作为列表的第一项,如果您只使用第二项,它仍然可以工作。
    • 编写这样的搜索程序更容易数独求解器 https://web.archive.org/web/20130823222012/http://www.cs.tufts.edu/~nr/comp150fp/archive/richard-bird/sudoku.pdf因为它不会立即加载每个组合 - 它只是在运行过程中生成它们。你可以用其他语言做到这一点,但只有 Haskell 做到这一点默认情况下.

您可以查看以下链接:

  • https://c2.com/cgi/wiki?函数式编程的优点 https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming
  • https://learn.microsoft.com/archive/blogs/wesdyer/why-function-programming-is-important-in-a-mixed-environment 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://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-function-programming.html https://useless-factor.blogspot.com/2007/05/advantage-of-functional-programming.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell 在现实世界中的用途是什么? [关闭] 的相关文章

  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • 如何同时将透镜(或任何其他光学器件)视为吸气剂和设置剂?

    我正在尝试编写一个通用记录更新程序 它允许人们轻松更新记录中的字段existing记录 字段形状相似incoming记录 这是我到目前为止所拥有的 applyUpdater fields existing incoming let gett
  • 自定义 monad 的 MonadTransControl 实例

    的文档monad control提供有关如何创建实例的示例MonadTransControl using defaultLiftWith and defaultRestoreT 该示例适用于以下情况newtype newtype Count
  • 如何在 Haskell Pipes 中将两个 Consumer 合并为一个?

    我使用Haskell流处理库pipes https hackage haskell org package pipes编写一个命令行工具 每个命令行操作都可以将结果输出到stdout并记录到stderr with pipes API I n
  • Data.Array 有多快?

    The 文档 http haskell org ghc docs latest html libraries array 0 3 0 3 Data Array html of Data Array reads Haskell 提供了可索引数
  • 有没有好的 Clojure 基准测试?

    Edit Clojure 基准测试已达到基准游戏 http benchmarksgame alioth debian org u64q clojure html 我已经制作了这个问题社区维基并邀请其他人保持更新 有人知道 Clojure 性
  • 某些数据结构是否比其他数据结构更适合函数式编程?

    In 现实世界哈斯克尔 http book realworldhaskell org 有一个标题为 没有数组或哈希表的生活 的部分 其中作者建议在函数式编程中首选列表和树 而在命令式程序中可能会使用数组或哈希表 这是有道理的 因为在创建新列
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 相当于 Java 中 C++ 的 std::bind 吗?

    有没有一种方法可以像 C 中的 std bind 一样将 Java 中的参数绑定到函数指针 Java 中类似的东西会是什么 void PrintStringInt const char s int n std cout lt lt s lt
  • 使用 Parsec 解析正则表达式

    我正在尝试通过实现一个小型正则表达式解析器来学习秒差距 在 BNF 中 我的语法类似于 EXP EXP LIT EXP LIT 我尝试在 Haskell 中实现这一点 expr try star lt gt try litE lt gt l
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • 返回带有参数的函数的函数

    创建一个应返回包含原始函数参数的函数时 我应该如何处理 例如考虑这个函数 a lt function value function x x value 我希望它返回我在结果函数的参数中指定的值 如下所示 b lt a 3 gt b gt f
  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • 从函数返回随机值是副作用吗?

    我当时正在编写一些 F 代码 并且正在编写一个从一组字符串中返回随机字符串的函数 假设我有这样的事情 open System let a a b c d let rstring arr string let r new Random arr
  • 来自数据类型的 Haskell 随机数

    我对 Haskell 还很陌生 我有一个数据类型 data Sentence Prop Int No Sentence And Sentence Or Sentence deriving Eq 我已经为它写了一个 Show 实例 然而 无论
  • Scala 功能设计模式目录

    一周以来我一直在阅读 Scala 编程 作者一步一步地介绍了该语言的元素 但我仍然很困惑何时使用演员 闭包 柯里化等功能性的东西 我正在寻找功能结构的典型用例或最佳实践的目录 我并不是说在 Scala 中重新实现像 GoF 这样的众所周知的
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • 需要澄清令人困惑的 Http4s 消息类型 `Response[F]` / `Request[F]`

    我很难理解为什么Request and Response参数化为F 类似的东西是猫效应数据类型资源 从文档中 https typelevel org cats effect docs std resource https typelevel

随机推荐