gpt4 book ai didi

haskell - `valueB` 是如何工作的?它总是返回相同的值?

转载 作者:行者123 更新时间:2023-12-02 12:17:12 25 4
gpt4 key购买 nike

考虑以下代码:

module Main where

import Control.Event.Handler
import Reactive.Banana
import Reactive.Banana.Frameworks

main :: IO ()
main = do
(addHandler, fire) <- newAddHandler
compile (network addHandler) >>= actuate
fire "fire one"
fire "fire two"

network :: AddHandler String -> MomentIO ()
network addHandler = do
fireEvent <- fromAddHandler addHandler
behavior <- stepper "initial stepper value" fireEvent
behaviorValue <- valueB behavior
reactimate $ putStrLn . (\v -> "fire input: " ++ show v) <$> fireEvent
reactimate $ print behaviorValue <$ fireEvent

该程序的输出是:

fire input: "fire one"
"initial stepper value"
fire input: "fire two"
"initial stepper value"

我是否正确使用了valueB?如果不是,我做错了什么? valueB 的用途是什么以及何时应该使用它?

最佳答案

记住Moment会有所帮助。 (和 MomentIO )monad 表示在特定时刻发生的计算。组合器valueB只是返回当时行为的值。就您而言,那是在一开始。

如果您想在不同时间对行为的值进行采样,可以使用<@><@运算符,与 <$> 非常相似和<$ 。例如,将最后一行替换为

reactimate $ print <$> behavior <@ fireEvent

将在事件触发时打印每个时刻的行为值。

更高级的用法是使用 valueBexecute .

关于haskell - `valueB` 是如何工作的?它总是返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902800/

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