Scala 标准 API 中的 IO Haskell Monad 等价物是什么?

What is the IO Haskell Monad equivalent in Scala standard API?

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

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

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

没有类型

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

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