gpt4 book ai didi

scala - 为什么 Scala 没有 IO Monad?

转载 作者:行者123 更新时间:2023-12-03 10:39:37 25 4
gpt4 key购买 nike

我想知道为什么 Scala 没有像 Haskell 这样的 IO Monad。

因此,在 Scala 中,方法的返回类型 readLine是字符串,而在 Haskell 中可比较的函数 getLine具有返回类型 IO 字符串。

a similar question关于这个话题,但它的答案并不令人满意:

Using IO is certainly not the dominant style in scala.



有人可以进一步解释一下吗?不将 IO Monads 包含到 Scala 的设计决策是什么?

最佳答案

因为 Scala 不是纯的(并且无法强制函数是纯的,就像 D 一样)并且允许副作用。它与 Java 密切互操作(例如,重用 Java 库的大部分)。 Scala 并不懒惰,因此在 Haskell 中的执行顺序没有问题(例如,不需要 >>seq )。在这种情况下,引入 IO Monad 会使生活变得更加艰难,但不会获得太多 yield 。

但是,如果您真的有应用程序,其中 IO monad 具有显着优势,那么没有什么能阻止您编写自己的实现或使用 scalaz。参见例如http://apocalisp.wordpress.com/2011/12/19/towards-an-effect-system-in-scala-part-2-io-monad/

[编辑]

Why wasn't it done as a lazy and pure language?



这本来是完全可能的(例如,查看 Frege,一种与 Haskell 非常相似的 JVM 语言)。当然,这会使 Java 互操作性更加复杂,但我认为这不是主要原因。我认为懒惰和纯粹的语言是一件很酷的事情,但对于大多数 Java 程序员来说太陌生了,他们是 Scala 的目标受众。 Scala 旨在与 Java 的对象模型(与 pure 和 lazy 完全相反)合作,允许函数式和混合函数式 OO 编程,但不强制执行它(这将赶走几乎所有 Java 程序员)。事实上,拥有另一种完全函数式的语言是没有意义的:有 Haskell、Erlang、F#(和其他 ML)和 Clojure(和其他 Schemes/Lisps),它们都非常复杂、稳定和成功,而且不会很容易被新人取代。

关于scala - 为什么 Scala 没有 IO Monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com