gpt4 book ai didi

scala - 使用 Scalaz 流,如何将 A => Task[B] 转换为 Process1[A,B]

转载 作者:行者123 更新时间:2023-12-01 22:49:06 25 4
gpt4 key购买 nike

我将向远程服务器发送的 http 请求编码为一个函数,该函数接受 id 并生成一个 Task[JValue]。

我想将该函数转换为 Process1,以简化我的程序(通过简化,我的意思是尽可能使用进程作为构建 block )

我想转换函数

    reqDoc(id:A):Task[B]

(其中A是Id的类型,B是响应的类型)进入

    reqDoc:Process1[A,B]

最佳答案

我不认为你想要一个Process1,我认为如果你要从中创建一个Process1,你就会创建一个Process1[A , Task[B]] 这不是您想要的。

我认为您想要创建一个Channel,您可以将Process附加到该 channel 上,这将为您提供一个新的ProcessChannel 只是产生有效功能的Process 的别名。

type Channel[+F[_],-I,O] = Process[F, I => F[O]]

由于您有一个函数,因此您只需创建一个进程来生成同一函数的无限流,该流常量

// a String => Task[Int] that we'll make a channel from
val length: String => Task[Int] = (x => Task.delay(x.length))
// a channel is just a source of functions:
val lengthChannel = Process.constant(length)

现在给定一个生成字符串的进程(这里我们只生成一个):

val source: Process[Task,String] = Process.emit("asdf")

我们可以通过我们的 channel 运行我们的源来创建一个流程

val lengths = source through lengthChannel

我们可以运行我们的进程并获取“asdf”的长度

scala> lengths.runLog.run
res5: scala.collection.immutable.IndexedSeq[Int] = Vector(4)

关于scala - 使用 Scalaz 流,如何将 A => Task[B] 转换为 Process1[A,B],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com