【问题标题】:Some languages and uses for monadsmonad 的一些语言和用途
【发布时间】:2011-04-15 17:23:30
【问题描述】:

根据您,您认为哪种语言最适合实现 monad(Python/Ruby/LISP)?还有谁能告诉我一些可能的 monad 用途(请举例),比如例外情况?

提前致谢

【问题讨论】:

  • 我更改了标题,因为前一个标题误导了不经意的路人认为这个问题是有争议的。为了防止问题被关闭,我编辑了标题。

标签: scala functional-programming clojure lisp monads


【解决方案1】:

All About Monads - 传奇教程,列出了所有标准 monad,并提供了许多真实世界的示例。

即使在主流语言中也能遇到的流行 monad 是 MaybeListContinuation。 有些人还认为 jQuery 本身就是一个 monad(因为它遵循 monadic axioms)。

至于语言选择,Haskell 及其衍生工具使用 monad 作为基本概念,但是,作为一种选择,在许多现代语言中构造 monad 是可能的。为了熟悉 monad 概念,我最好选择我最熟悉的语言。

【讨论】:

  • "All about monads" 似乎消失了 :( .. 我能找到的最接近的是这里:en.wikibooks.org/wiki/Haskell/Understanding_monads(这是 6 页中的第一页)。如果您再次看到原始文章,请让我知道。
  • jQuery几乎是一个单子。它的map 是一半map 和一半concatMap,有点混乱。如果你正确地清理了它的语义,事情会简单得多。
  • “关于 Monads 的一切”确实存在。访问horna.org.ua/books/All_About_Monads.pdf
【解决方案2】:

【讨论】:

【解决方案3】:

按优先顺序:

  1. 哈斯克尔
  2. F#
  3. 斯卡拉
  4. C#

单子按简单性降序排列:

  1. 也许(例外)
  2. 读者
  3. 作家
  4. 状态
  5. 解析器
  6. 异步

【讨论】:

  • 没有 OCaml 还是用 F# 列出的?
  • 不幸的是,Ocaml 没有内置的 monad 语法糖
  • Scala > F#。为什么?简单的。在 Scala 中,您可以编写在任何 monad 上运行的函数,而在 F# 中则不能,因为这需要更高种类的类型。
  • 因为我更了解 f# :)​​ 但是在 f# 中,我可以编写一些函数,在编译时类型解析的任何 monad 上运行。
  • 不错的列表,但我也会将 Scala 放在 F# 之上。我还会在 Maybe 和 Reader 之间添加 List 和 Set,在 Parser 和 Async 之间添加 Continuation。
【解决方案4】:

例如,请参阅 Philip Wadler,“函数式编程的 Monads”。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多