gpt4 book ai didi

functional-programming - 如何使用免费 Monad

转载 作者:行者123 更新时间:2023-12-02 10:34:13 31 4
gpt4 key购买 nike

我一直在研究 Free monad,因为我读到它的一个用例是以无副作用的方式进行日志记录。

我尝试在 JavaScript 中使用 Monet 来执行此操作图书馆。

但是缺乏文档,而且我对 Free monad 的理解不够好,无法自己弄清楚(我一直在尝试)。

我研究了 Haskell 的实现,但我没有很好地阅读 Haskell,而且这些方法的命名似乎并不相同,所以我遇到了麻烦。

是否有人可以给我一个简单的例子,说明 Free monad 如何在与上述库匹配的 JavaScript 或伪代码中工作?

我觉得如果我能看到一个完整的例子,我会更好地理解。

以下是 Monet 库中的单元测试:https://github.com/monet/monet.js/blob/develop/test/free-spec.js

但它们对我帮助不大(因为它们是测试)。

最佳答案

以无副作用的方式进行日志记录通常是使用Writer Monad来完成的。 :

const compose = (f, g) => value => f(g(value));

const Writer = ({ log = [], value }) => ({
flatMap: func => {
const mapped = func(value);

return Writer({
log: log.concat(mapped.log),
value: mapped.value
});
},

log,
value
});

Writer.of = value => Writer({ value });

Writer.log = entry => value => Writer({ log: [entry], value });

const { log, value } = Writer.of(-42.5)
.flatMap(compose(Writer.of, Math.abs))
.flatMap(Writer.log(`abs`))
.flatMap(compose(Writer.of, Math.floor))
.flatMap(Writer.log(`floor`));

console.log({ log, value })

关于functional-programming - 如何使用免费 Monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262295/

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