Reader Int (T Int) f (N i l r) = ask >>= \x -> local ((--6ren">
gpt4 book ai didi

haskell - Reader monad 的 "ask"函数是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 01:55:42 26 4
gpt4 key购买 nike

data T b = E | N b (T b) (T b) 


f :: T b -> Reader Int (T Int)
f (N i l r) = ask >>= \x -> local ((-)4) (f l) >>= \l' -> local ((-)1) (f r) >>= \r' -> return (N x l' r')
f E = return E

我无法理解这段代码的工作原理。特别是,ask 如何知道环境在哪里(在我们的例子中只是 Int)?

更准确地说:我是一名命令式程序员,使用此类语言很容易。可以在任何对象上调用方法,例如:obj.f(),或者当我们希望函数使用外部数据时,我们必须通过参数传递数据。

最佳答案

这就是 Reader monad 所做的;它为您提供了一个ask 函数,该函数“神奇地”凭空弹出一个值。要实际使用它,您需要调用runReader,并为其提供Int 环境。 Reader 类型然后自动将其从 runReader 调用传播到每个 ask 调用。

关于haskell - Reader monad 的 "ask"函数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574321/

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