6

我知道 Scalaz 中的 IO 运算符有一些几乎相同的实现,例如putStrLn :: String -> IO (),getLine :: IO String但我的意思是关于 Scala 标准 API,为什么没有这样的等价物?我知道 Scala 不像 Haskell 那样是一种纯语言,并且有副作用,但我认为这种数据类型非常具有描述性和有用性。我不知道是否TryOption或者Either会做这项工作。

4

2 回答 2

8

Scala 的标准库没有 IO monad。Monix、Scalaz、FS2 和现在的 Cats 等库提供 IO monad(或具有并发支持的 Task)。如果您想进行 haskell 类型编程,您将需要这些库之一,尤其是 Cats 或 Scalaz,它们还有其他有用的工具和类型类(例如实际的函子和 monad 类型类)。

于 2017-06-23T13:37:13.863 回答
1

Scala 有隐含的环境副作用,就像 C♯、Java、C++、Objective-C、Swift、C、Pascal、Basic、Perl、PHP、Python、Ruby、ECMAScript 等。没有IO.

有提供类型的第三方库IO,但它没有提供与 Haskell 相同的保证:Haskell 只有很少的逃生舱口(unsafePerformIO),在 Scala 中,几乎所有东西都是逃生舱口。

然而,有一些想法,我相信即使是在 Scala 中研究效果系统的原型,而 Dotty 的流线型、更强大和健全的类型系统可能会成为一个更好的基础。

于 2017-06-23T21:49:39.540 回答