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 那样的纯语言,它有副作用,但我认为这种数据类型非常具有描述性和实用性。
我不知道 Try
、Option
或 Either
是否可以胜任这项工作。
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 的流线型、更强大、声音类型系统可能会成为更好的基础。
我知道 Scalaz 中有一些几乎相同的 IO 运算符实现,例如 putStrLn :: String -> IO (
) 和 getLine :: IO String
但我的意思是关于 Scala 标准 API 为什么没有这样的等价物?
我知道 Scala 不是 Haskell 那样的纯语言,它有副作用,但我认为这种数据类型非常具有描述性和实用性。
我不知道 Try
、Option
或 Either
是否可以胜任这项工作。
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 的流线型、更强大、声音类型系统可能会成为更好的基础。