Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 netwire的完整示例?_Haskell - Fatal编程技术网

Haskell netwire的完整示例?

Haskell netwire的完整示例?,haskell,Haskell,我读过netwire,但我很难想象在一个“真实”的应用程序中整个事情会是什么样子。由于本教程只涉及纯电线,我特别感兴趣的游戏,如果有任何,但我不会介意其他。反应型香蕉的例子可能也可以。它们应该只是说明FRP是如何有用的。Netwire在一些实际应用中使用,但我不知道在哪里可以找到它们。很可能他们现在关起门来了。然而,Reddit上已经发布了一些示例应用程序的博客,所以您可能想查看一下。只要在那里搜索“netwire”。不幸的是,这些示例没有帮助,因为这两个库(特别是用于事件处理的库)的概念完全不

我读过netwire,但我很难想象在一个“真实”的应用程序中整个事情会是什么样子。由于本教程只涉及纯电线,我特别感兴趣的游戏,如果有任何,但我不会介意其他。反应型香蕉的例子可能也可以。它们应该只是说明FRP是如何有用的。

Netwire在一些实际应用中使用,但我不知道在哪里可以找到它们。很可能他们现在关起门来了。然而,Reddit上已经发布了一些示例应用程序的博客,所以您可能想查看一下。只要在那里搜索“netwire”。不幸的是,这些示例没有帮助,因为这两个库(特别是用于事件处理的库)的概念完全不同

Netwire应用程序的总体结构如下:首先定义一个反应值,我们称之为
模拟
。在最简单的情况下,它是一根纯电线:

simulation :: WireP a [Particle]
在不详细说明(目前)如何编写该电线的情况下,让我现在解释一下它是什么。输出类型为
[Particle]
,因此它是粒子的反应列表。这意味着,这个列表可以随着时间的推移而改变。值得注意的是,输入类型是完全多态的,因此您知道此被动值不依赖于其他被动值

现在,您需要获取特定时间点上粒子列表的实际值。这就是会话和步进函数的作用。在这种情况下,大多数应用程序只需要一个会话步进函数,如
stepSessionP
。您只需在循环中调用此函数,即可获得此时导线的当前值。不需要连续调用此函数

您会注意到,步进函数不会给您一个
[Particle]
,而是一个
或LastException[Particle]
。这是因为Netwire中的反应值可以抑制。这就是事件概念。你从分类法中知道

w . id
w
相同,大致相同
x+0
x
相同。相对于
()
,标识线为中性线。然而,现在想象一下

w . myId
其中
myId
的作用类似于标识线,只产生它所依赖的任何反应值,但有时根本不会产生。有时它忽略了值,只是抑制,在这种情况下,合成本身抑制。您可以将
myId
解释为一个事件连线,并在
myId
的情况下将合成内容解读为“
w
”:

然后是选择运算符
()
,其作用类似于事件的“或”:

w1 . ev1 <|> w2 . ev2 <|> w3
w1。ev1 w2。ev2 w3

如果
ev1
禁用,则尝试其余操作。理想情况下,主线从不禁止,因此您可以使用
stepSessionP\uuu
,但它由潜在的禁止线组成。您也可以使用自己的抑制幺半群来获得退出信号。

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


这是对netwire的一个不错的介绍,但它并不能真正帮助我理解在应用程序中会是什么样子。@Cubic:本教程介绍了这一点。它为您提供了一个简单的应用程序,您可以进行实验。如果您对该示例有任何问题,请在此处给出更详细的问题描述。我理解该示例,但它所做的只是定义一条纯导线并逐步执行。虽然这很有趣,但实际上并没有说明如何在实际应用中使用导线。我知道玻璃钢没有应用,但我希望至少有一种。@Cubic:好吧,理想的情况是,在实际应用中,你的金属丝也是纯的。然而,“纯”并不意味着“非一元”。在您的wire下面有一个读卡器monad,如
WireM((->)AppState)
而不是
WireP
,这是很常见的。例如,在SDL模拟中,您可以将当前GUI事件作为
AppState
,并且导线可以生成类似于Gloss中的
picture
或vty中的
Image
编码的图片。主循环将负责构造
AppState
并显示输出图像。我不知道通常是monad的m参数会做什么-除了修复stepWire的类型。请看以下内容:。代码不是我的,需要Windows和以下软件包:ansi终端、composition、netwire。这太棒了,正是我想要的。
w1 . ev1 <|> w2 . ev2 <|> w3