gpt4 book ai didi

haskell - 为什么 Reader monad 存储一个函数?

转载 作者:行者123 更新时间:2023-12-01 07:18:12 29 4
gpt4 key购买 nike

根据
All about monads

Monad values (of the Reader monad) are functions from the environment to a value. The bound function is applied to the bound value, and both have access to the shared environment.



但是,为什么有必要在这个 monad 中使用一个函数(而不是,例如,两个变量,一个用于环境,一个用于值)?

最佳答案

reader monad 的重点是对依赖于某些环境的值进行建模。或者,如果您愿意,可以使用“隐式”输入进行计算。这与沿其环境存储的值不同。

考虑一下:

newtype Reader s a = Reader (s -> a)

ask :: Reader a a
ask = Reader (\s -> s)

这里的值(value)和环境是一样的。以上只是从环境中“获取”值并返回它。

相比之下,
newtype Reader s a = Reader (s, a)

ask :: Reader a a
ask = Reader (s, s)
where s = ???

在这里,我们需要同时生产环境和值(value)。但我们没有实际的方法来做到这一点!环境从第一个例子中的输入转变为输出——这使得实现 ask不可能的。

关于haskell - 为什么 Reader monad 存储一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922016/

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