小编mig*_*rao的帖子

FRP - 事件流和信号 - 使用信号时会丢失什么?

在Classic FRP的最近实现中,例如反应性香蕉,存在事件流和信号,它们是阶梯函数(反应性香蕉称它们为行为,但它们仍然是阶梯函数).我注意到Elm只使用信号,并没有区分信号和事件流.此外,反应性香蕉允许从事件流转变为信号(编辑:并且它可以使用重新作用对行为采取行动'虽然不被认为是良好做法),这意味着理论上我们可以应用所有事件流通过首先将信号转换为事件流,应用然后再次转换,对信号/行为进行组合.因此,鉴于它通常更容易使用并只学习一个抽象,分离信号和事件流的优势是什么?在使用信号和转换所有事件流组合器以对信号进行操作时是否有任何损失?

编辑:讨论非常有趣.我自己讨论的主要结论是,行为/事件源既需要相互递归的定义(反馈),也需要输出依赖于两个输入(一个行为和一个事件源),但只在一个时产生一个动作.他们改变了(<@>).

haskell functional-programming frp reactive-banana elm

22
推荐指数
3
解决办法
3416
查看次数

Mac OS X上的Git是否有可视化客户端,允许以图形方式进行交互式rebase?

我想知道是否有OSI的gui应用程序允许在GUI中执行git的交互式rebase的所有功能.我已经调查了大多数可用选项,但找不到具有此功能的选项.

git user-interface

7
推荐指数
1
解决办法
680
查看次数

反应性香蕉节流事件

我想在反应香蕉中实施某种类型的事件限制.它应该起作用,如果从最后一个通过的事件到达少于delta秒,则不通过事件.如果它没有通过那么它被存储并在从最后一个被触发的事件开始的delta秒之后被触发.

下面是一个程序,用于为带有时间戳的数字列表实现此功能.是否有可能将其转化为反应性香蕉?

此外,在反应性香蕉中,如何在其他事件进入后x秒发射事件?

module Main where

import Data.List

-- 1 second throtling
-- logic is to never output a value before 1 second has passed since last value was outputed.

main :: IO()
main = print $ test [ (0.0, 1.0), (1.1, 2.0), (1.5,3.0), (1.7,4.0),  (2.2, 5.0)  ]
--should output  [ (0.0, 1.0), (1.1, 2.0), (2.1,4.0), (3.1, 5.0) ]

test :: [(Double,Double)] -> [(Double,Double)]
test list = g v (concat xs)
       where
               (v, xs) = mapAccumL f (-50,Nothing) list
               g …

haskell frp reactive-programming

7
推荐指数
1
解决办法
367
查看次数

为什么有些threepenny-gui FRP组合器在MonadIO monad上运行而不是纯粹?

首先是一个免责声明,我可能完全误解了三便器的工作方式,因为我对Haskell的知识不那么先进,所以我的断言就是一粒盐.:-)

在我看来,一些组合器不是纯粹的,例如

stepper :: MonadIO m => a -> Event a -> m (Behavior a)
Run Code Online (Sandbox Code Playgroud)

步进器是否必然在某种类型的IO monad上运行(因此它不是纯粹的),或者我在这里误解了什么?第二个问题,如果那些组合器确实不合适,那为什么呢?对我来说,这使得构建事件图的代码比反应性香蕉更好,因为必须使用IO monad而不是纯粹的普通函数.代码似乎变得比在反应性香蕉中变得更复杂.

更可怕的是,valueChange似乎是纯粹的类型

valueChange :: Element -> Event String
Run Code Online (Sandbox Code Playgroud)

但它实际上是在内部使用unsafeMapIO,它实际上是在做隐藏的IO吗?同样,我可能会误解某些东西,但这不是Haskell中最严重的罪吗?这也令人困惑,我无法从类型中看出回叫注册是如何发生的......这在我之前从未发生在Haskell中......是否这样做是为了让用户不得不处理Frameworks monad?

haskell frp reactive-banana threepenny-gui

7
推荐指数
1
解决办法
483
查看次数

在reactive-banana中,从多个线程触发处理程序操作是否安全?

触发火灾动作是否安全

(addHandler, fire) <- newAddHandler
Run Code Online (Sandbox Code Playgroud)

从一个不同的线程,编译反应香蕉图?

haskell frp reactive-banana

6
推荐指数
1
解决办法
221
查看次数

在Haskell的反应香蕉中,反应网络的flatMap相当于什么?

我正在寻找在reactive-banana中的函数,它将根据另一个事件流或信号的传入值(行为?)选择接下来要发出的事件流.在scala库中,响应式网络可以通过以下方式完成:

 flatMap[U](f: T => EventStream[U]): EventStream[U] 
Run Code Online (Sandbox Code Playgroud)

谢谢 !

haskell frp reactive-programming reactive-banana

3
推荐指数
1
解决办法
273
查看次数

如何使用遍历TypeClass基于元素累积状态,然后映射状态和元素?

我应该传递给'遍历'(从迭代器模式的本质)的函数是什么,这样我可以根据每个原始元素累积状态,然后根据原始元素和状态到目前为止进行映射.

在'collect'和'disperse'中,只有映射取决于状态,或者状态取决于元素,但不能同时取决于两者.

http://etorreborre.blogspot.co.uk/2011/06/essence-of-iterator-pattern.html上的表似乎表示我应该使用'traverse'但是traverse是实现所有其他功能的函数,所以我有点迷茫.

iterator functional-programming scala

3
推荐指数
1
解决办法
265
查看次数

如何使用Haskell和海龟库从文件流式传输时删除行

假设我想从一个文件流到另一个文件,但我想跳过输入文件的前n行.如果没有先使用'fold'折叠整个第一个文件,我该怎么做?

import Turtle
main = output "/tmp/b.txt" (f (input "/tmp/a.txt"))
Run Code Online (Sandbox Code Playgroud)

应该做什么才能实现这一目标?

ps:我没有足够的声誉来创建'haskell-turtle'标签.

haskell haskell-turtle

3
推荐指数
1
解决办法
289
查看次数