如何使用功能反应式编程每个时间步查询一个URL?

时间:2013-09-08 04:47:02

标签: haskell functional-programming reactive-programming frp elm

我想知道,您如何使用功能反应式编程编写程序,每隔x个时间步,从给定的URL检索JSON对象?

我正在研究Elm框架,但我对更通用的解决方案持开放态度。我有一个方法

send : Signal (Request a) -> Signal (Response String)

即。它将一个HTTP请求包含在一个信号中,并返回一个包含在信号中的响应字符串。

现在,我有一个“下一个状态”功能,它接收输入信号并创建一个新的游戏状态。这些都是用foldp包裹起来的。其中一个输入信号是来自HTTP请求的响应。但是,当我运行它时,查询只运行一次,而不是每次运行一次。我该如何解决这个问题?

编辑:这是我如何使用非FRP(命令式)来解决这个问题:

while True:
    myJson = send postRequest url
    --do stuff with myJSON
    sleep(timestep)

即。只是经常查询网址,无限循环。

1 个答案:

答案 0 :(得分:5)

从Elm docs中你会发现:

every : Time -> Signal Time

lift : (a -> b) -> Signal a -> Signal b

get : String -> Request String

send : Signal (Request a) -> Signal (Response String)

以上功能可用于满足您的需求:

send $ lift (\_ -> get myURL) $ every (10 * seconds),其类型为Signal (Response String)

我没有测试过代码,但我希望这能为您提供这个想法。