我有一个IO[List[String]]
(URL字符串(,我想将其转换为逗号分隔的字符串。有我可以使用的联接吗?我正被IO
型所困扰。
您可以使用map
方法将函数应用于IO
操作的结果:
def toCommaSeparated(
io: IO[List[String]]
): IO[String] =
io.map(_.mkString(", "))
有一种方法。您可以在最后使用unsafeRunSync()
或unsafePerformIO()
一次来评估封装的代码。
但我建议不要这样做,因为IO的目的是首先封装副作用代码,否则会使代码变得不纯净,被包裹在IO中,除非我们希望它这样做,否则无法进行评估
以一元的方式,您可以使用map
和flatMap
函数编写代码来组成其他函数,理想情况下,最后只调用其中一个不安全的操作一次。从一元上下文中获取值首先违背了它的目的,而且通常会在设计中暗示代码的味道。
更合乎逻辑的方法是使用Comonad,它有一个extract
方法,而该方法采用F[A]
并提取A
。您必须确保在调用F[A]
时可以从它获得A
(例如,如果列表为空,则无法从List[A]
获得A
(。