首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netwire的完整示例?

netwire的完整示例?
EN

Stack Overflow用户
提问于 2013-02-09 19:48:47
回答 2查看 3.2K关注 0票数 14

我读过netwire的quickstart,但我很难想象整个东西在一个“真正的”应用程序中会是什么样子。由于本教程只涉及纯网络,因此我对游戏特别感兴趣,但我不介意其他游戏。响应式的Banana示例可能也会这样做。他们应该只是说明FRP是如何有用的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-05 04:06:04

对于那些在将来偶然发现这一点的人,我认为这是一个使用netwire的完整应用程序的很好的例子。他也开始(从今天开始)开发PACMAN。

http://www.reddit.com/r/haskell/comments/1kmes7/building_an_asteroids_clone_in_haskell_using/

http://ocharles.org.uk/blog/posts/2013-08-18-asteroids-in-netwire.html

https://github.com/ocharles/netwire-classics/

票数 7
EN

Stack Overflow用户

发布于 2013-02-09 22:55:25

Netwire在一些真实的应用程序中使用,但我不知道在哪里可以找到它们。很可能他们现在是关起门来的。然而,一些示例应用程序已经在Reddit上发布了博客,所以你可能想看看/r/haskell。在那里搜索"netwire“就可以了。不幸的是,反应式香蕉示例不会有帮助,因为这两个库的概念是完全不同的,特别是对于事件处理。

Netwire应用程序的整体结构是这样的:首先定义一个反应值,让我们将其称为simulation。在最简单的情况下,它是一条纯电线:

代码语言:javascript
复制
simulation :: WireP a [Particle]

在不详细说明如何编写该连接的情况下,现在让我来解释一下它是什么。输出类型为[Particle],因此它是粒子的反应式列表。这意味着,这个列表可能会随着时间的推移而变化。值得注意的是,输入类型是完全多态的,因此您知道此反应值不依赖于其他反应值。

现在,您希望获取粒子列表在特定时间点的实际值。这就是会话和单步执行函数的用武之地。大多数应用程序只需要一个会话单步执行函数,比如本例中的stepSessionP。您只需在循环中调用此函数,即可获得该时刻的导线的当前值。不需要连续调用此函数。

您将注意到,单步执行函数没有给出[Particle],而是给出了一个Either LastException [Particle]。这是因为Netwire中的电抗值可能会抑制。这就是事件的概念。你从分类法则中知道,

代码语言:javascript
复制
w . id

w相同,就像x + 0x一样。标识线相对于(.)是中立的。然而,现在想象一下

代码语言:javascript
复制
w . myId

其中myId的作用就像同一线,只会产生它所依赖的任何反应值,但有时根本不会产生结果。有时它会忽略这个值,只是禁止,在这种情况下,组合本身就会禁止。您可以将myId解释为事件连接,并将组合读作"w if myId":

代码语言:javascript
复制
w . keyDown Space

然后您有您的选择操作符(<|>),它的作用类似于事件的"or“:

代码语言:javascript
复制
w1 . ev1 <|> w2 . ev2 <|> w3

如果ev1禁止,则会尝试其余的操作。理想情况下,主线永远不会禁止,因此您可以改用stepSessionP_,但它由潜在的禁止线组成。您也可以使用自己的抑制monoid来获得诸如退出信号之类的东西。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14787797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档