gpt4 book ai didi

scala - 如何在 Scala 中使用 Reader 和 Writer monad?

转载 作者:行者123 更新时间:2023-12-02 04:41:10 26 4
gpt4 key购买 nike

假设我正在编写一个程序,它读取一些输入,对其进行处理并写入输出。

假设我还有一个函数def process(input: MyInput): MyOutput

现在我应该使用 Reader monad 作为输入。

def readAndProcess(reader: MyReader[MyInput]): MyReader[MyOutput] =   for(in <- reader) yield process(in)

到目前为止一切顺利,但现在我需要在某处写入输出。也就是说,我需要一个 Writer monad 并且可以定义一个函数 readProcessAndWrite

def readProcessAndWrite(reader: MyReader[MyInput]): MyWriter[MyOutput]

假设我有一个函数

def write(out: MyOutput, writer: MyWriter[MyOutput]) : MyWriter[MyOutput]

如何定义 readProcessAndWrite

def readProcessAndWrite(reader: MyReader[MyInput],                         writer: MyWriter[MyOutput]): MyWriter[MyOutput] = ... ???

最佳答案

我觉得你有点误会了。 Reader monad 不是为了读取程序的输入,而是为了避免将相同的参数传递给各种函数。同样,Writer 是关于通过计算累积一些状态,而不是将其写入(例如)标准输出或文件。 (当然,你可以在积累之后写它,但是你不会为此使用 Writer monad!)

如果你真的想组合它们,你需要编写一个组合的 monad(ReaderWriter[MyInput, MyOutput];参见 this question )或 monad transformers (ReaderT[MyInput, Writer[MyOutput]] 或相反)。

关于scala - 如何在 Scala 中使用 Reader 和 Writer monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817434/

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