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