- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 netwire 包,试图了解 FRP,我有一个简单的问题。
从以下简单的线路开始,我能够每 5 秒(大约)发出一个事件
myWire :: (Monad m, HasTime t s) => Wire s () m a Float
myWire = timeF
myWire' :: (Monad m, HasTime t s) => Wire s () m a Int
myWire' = fmap round myWire
myEvent :: (Monad m, HasTime t s) => Wire s () m a (Event Int)
myEvent = periodic 5 . myWire'
这非常好且直接,但我接下来要做的是将生成的每个事件映射到一条线,然后我可以观看更新。我有一个累加器函数,如下所示:
eventList :: (Monad m, HasTime t s)
=> Wire s () m a (Event [Wire s () m a Int])
eventList = accumE go [] . myEvent
where go soFar x = f x : soFar
f x = for 10 . pure x --> pure 0
然后,我引入一条新的连线,它将抑制直到 eventList
开始触发事件,如下所示:
myList :: (Monad m, HasTime t s) => Wire s () m a [Wire s () m a Int]
myList = asSoonAs . eventList
所以我已经从事件转到包含电线列表的电线。最后,我引入了一条线来步进每条线并生成结果列表:
myNums :: (Monad m, HasTime t s) => Wire s () m [Wire s () m a Int] [Int]
myNums = mkGen $ \dt wires -> do
stepped <- mapM (\w -> stepWire w dt $ Right undefined) wires
let alive = [ (r, w) | (Right r, w) <- stepped ]
return (Right (map fst alive), myNums)
myNumList :: (Monad m, HasTime t s) => Wire s () m a [Int]
myNumList = myNums . myList
最后,我有一个主要的例程来测试它:
main = testWire clockSession_ myNumList
我期望看到的是一个不断增长的列表,其中列表中的每个元素将显示其创建时间 10 秒,之后该元素将显示零。相反,我得到的是越来越多的静态值列表。例如,我期望在几步之后看到的是
[0]
[5, 0]
[10, 5, 0]
[15, 10, 0, 0]
等等。我实际看到的是
[0]
[5, 0]
[10, 5, 0]
[15, 10, 5, 0]
所以我知道我的累加器功能正在工作:创建的每个事件都被转换为一条线。但我没有看到这些电线随着时间的推移发出不同的值。我的声明 为 10 。 pure x --> pure 0
应该在时间过去后将它们切换为发射 0。
我对 FRP 还很陌生,所以我可能从根本上误解了它的一些重要内容(可能是这样。)
最佳答案
问题在于事件生成的连线不是持久的。 Wire s e m a b
类型的给定值实际上是生成 b
类型值的函数的时间实例来自 a
类型的值。由于 Haskell 使用不可变值,为了步进连线,您必须对 stepWire
中生成的连线执行一些操作。否则,相同的输入会得到相同的输出。看看 myList
的结果:
Event 1: [for 10 . pure 0 --> pure 0]
Event 2: [for 10 . pure 5 --> pure 0, for 10 . pure 0 --> pure 0]
Event 3: [for 10 . pure 10 --> pure 0, for 10 . pure 5 --> pure 0, for 10 . pure 0 --> pure 0]
... etc
当您跨过这些电线时,您只会得到 [.., 10, 5, 0]
每次都是因为您正在重用 for 10 . pure x --> pure 0
的原始值金属丝。查看 stepWire
的签名:
stepWire :: Monad m => Wire s e m a b -> s -> Either e a -> m (Either e b, Wire s e m a b)
这意味着对于诸如这样的语句
(result, w') <- stepWire w dt (Right underfined)
...w'
应该在下次需要调用 stepWire
时使用,因为它是下一个时间点的行为。如果您有一条可以生产电线的电线,那么您需要将生产的电线卸载到某个地方,以便可以单独处理它们。
对于(我相信)能够为您提供所需行为的程序,请参阅 this code .
$ ghc -o test test.hs
[1 of 1] Compiling Main ( test.hs, test.o )
Linking test ...
$ ./test
[0]
[5,0]
[10,5,0]
[15,10,0,0]
[20,15,0,0,0]
...
关于 haskell 网络: wires of wires,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28918915/
我正在研究 netwire 包,试图了解 FRP,我有一个简单的问题。 从以下简单的线路开始,我能够每 5 秒(大约)发出一个事件 myWire :: (Monad m, HasTime t s) =
我正在尝试“正确”地在 netwire 5 中实现一组动态电线。我已阅读wires of wires的答案问题,而且我不太喜欢示例中的代码如何依赖于转换为行为的 Event 在恰好一次执行上显示非空>
本文整理了Java中org.fabric3.spi.wire.Wire.getInvocationChains()方法的一些代码示例,展示了Wire.getInvocationChains()的具体用
本文整理了Java中org.apache.commons.httpclient.Wire.wire()方法的一些代码示例,展示了Wire.wire()的具体用法。这些代码示例主要来源于Github/S
我用 Google 搜索了很多次,看来我不是唯一一个在真正理解 Wire.write() 和 Wire.read() 方面遇到问题的人。作为新手,我几乎从不使用别人已经编写的库,我尝试为模块创建我的类
我正在尝试启动我的一个 bundle ,但一启动它,我就收到以下异常。我不确定是什么问题。 org.osgi.framework.BundleException: Unresolved constra
我一直在尝试关注“使用 OSGi 构建模块化云应用程序”。在“创建第一个 OSGi 应用程序”一书的第 3 章中,作者描述了如何使用 bndtools 在 eclipse 中创建一个带有服务的简单 O
我正在编译一个使用org.json的Java插件。在添加此插件之前,该插件已能够编译并正确运行。我在stackoverflow上看到了类似的问题,但是没有一个问题使用gradle解决。 在我的类顶部,
我是 Java/Karaf 4.0.9/Maven/Pom/Camel 的新手,我无法解决问题 pom.xml文件中的Json部分,这里我改了很多Json version , 但没有用。
我正在使用最新版本的 atlassian SDK 为 JIRA 开发插件。我已经编写了大部分代码,并向我的项目的 pom.xml 文件添加了一些我需要的依赖项(见下文)。 不幸的是,在运行 atlas
我下载了 Camel CXF 示例“camel-example-cxf-osgi ”,并且能够毫无问题地运行 mvn install 命令(根据 readme.md 文件),然后当我尝试安装时它在 F
我正在使用 maven-bundle-plugin 构建一个 war 文件作为一个包,我想在 Felix 中部署它。这是相同的 POM 文件。 4.0.0 net.java jvnet-p
Wired's移动 View (将您的用户代理设置为 iOS Safari 以在桌面上查看它)具有对标准带下划线超链接样式的优雅转折: 我认为这是完全通过 CSS 实现的,没有外部图形,但不是: ba
我最近注意到 Wired 杂志的链接有一条蓝色下划线,该下划线很粗,横跨文本下行部分,并且颜色与文本不同。这是一个 random page举个例子。 我不认为这是用 bottom-border 完成的
我正在创建一个 8 位无符号 javascript 数组: var myArray = Uint8Array(64); 在客户端和服务器上操作这个数组,然后通过 socket.io 连接发送它。我们
我想在 selenium-wire 中获取一个响应主体作为字符串,我最终会将其解析为 JSON。selenium-wire 中的 response.body 给出字节字符串。我尝试将其解码为 resp
我在Linux服务器上安装seleniumwire库时遇到问题,它向我发送密码时出现了错误,我已经尝试解决它,但是我没有能力,有什么想法吗? Caused by: process didn
我正在尝试(在本地)运行 AngularJS 中的第三个示例 http://angularjs.org/new称为“Wire up a Backend”,运气不好(在 Chrome 上)。 它提示:
我有几个不同的部署。Deployment A: export port 3333Deployment B: export port 4444我想使用单个服务(具有 LoadBalancer 类型)来导
我使用 eclipse 为 arduino 制作项目。我将“Wire.h”包含到一个新类中,并且在 arduinocore 库项目中,我在 Wire.h header 处收到错误。错误在于该行76 最
我是一名优秀的程序员,十分优秀!