Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell valueB如何工作?它总是返回相同的值?_Haskell_Reactive Programming_Frp_Reactive Banana - Fatal编程技术网

Haskell valueB如何工作?它总是返回相同的值?

Haskell valueB如何工作?它总是返回相同的值?,haskell,reactive-programming,frp,reactive-banana,Haskell,Reactive Programming,Frp,Reactive Banana,考虑以下代码: 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" fi

考虑以下代码:

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

我是否正确使用了
valueB
?如果没有,我做错了什么?
valueB
的用途是什么?我应该在什么时候使用它?

根据文档,
valueB
获取给定行为的当前值。它在某些
单子时刻起作用。在这种情况下,这个“时刻”是网络创建的时间。由于这个原因,您总是得到相同的值。在开始时,您只要求一次该值

你不能直接对行为的变化做出反应,因为它们不会真正通知你它们的变化(它们是连续的信号)

如果您想查看
valueB
的操作。我认为
execute
功能正是您所需要的

execute (valueB <$> stepper "initial stepper value" fireEvent)
execute(valueB步进器“初始步进器值”事件)
这当然是一个非常做作的例子,但它应该做你想要的


另外,我没有专门使用ReactiveBanana的经验,但大多数FRP框架的工作方式都类似。

请记住,
时刻
(和
时刻
)monad表示在特定时刻发生的计算。组合器
valueB
只返回此时行为的值。对你来说,这只是一个开始


如果您想在不同的时间对某个行为的值进行采样,您可以使用
我最终意识到
valueB
出于某种原因出现在文档的“高阶”部分,它可能最常与其他高阶操作一起出现,如
switchB
。这是正确的吗?@Buttons840是的,完全正确。:-)
execute (valueB <$> stepper "initial stepper value" fireEvent)
reactimate $ print <$> behavior <@ fireEvent