Functional programming 具有多个输入和输出(如箭头所示)的流处理器

Functional programming 具有多个输入和输出(如箭头所示)的流处理器,functional-programming,arrows,Functional Programming,Arrows,阅读约翰·休斯的著作,我了解到箭头可以用来表示和组合具有单个输入和单个输出的流处理器。还可以使用成对或使用箭头选项表示多个输入和输出 然而,使用对意味着输入是一个对流,这不足以表示以不同速率到达的处理流ArrowChoice能够表达这一点,但它将两个流“多路复用”到一个流中 我正在寻找一种方法来组合具有多个输入和多个输出的流,同时仍然能够区分流被多路复用的情况和单独流的情况 这可能吗?也许您可以使用这些类型(),其定义如下: data These a b = This a | That b |

阅读约翰·休斯的著作,我了解到箭头可以用来表示和组合具有单个输入和单个输出的流处理器。还可以使用成对或使用
箭头选项
表示多个输入和输出

然而,使用对意味着输入是一个对流,这不足以表示以不同速率到达的处理流
ArrowChoice
能够表达这一点,但它将两个流“多路复用”到一个流中

我正在寻找一种方法来组合具有多个输入和多个输出的流,同时仍然能够区分流被多路复用的情况和单独流的情况


这可能吗?

也许您可以使用
这些
类型(),其定义如下:

data These a b = This a | That b | These a b

通过这种方式,您可以表示您正在接收一个流,或另一个流,或同时接收两个流。

也许您可以使用
这些
类型(),该类型定义为:

data These a b = This a | That b | These a b

通过这种方式,您可以表示您正在接收一个或另一个流,或同时接收两个流。

我不确定这是否解决了我的问题。我想定义一个类型,它表示具有0个或多个输入和0个或多个输出的流处理器,并且能够以类似于使用箭头的单输入单输出处理器的方式组合这些处理器。我不确定我是否理解。假设您有一个类型为
S(a或b)(c或d)
的值,您想通过某种方式来确定它是单流处理器还是多路复用两个流的流处理器?我的目标是将这些流处理器转换为FPGA硬件。为此,我希望能够有两种不同的构造:一个处理器接受两个流,另一个处理器接受任意类型的单个流。这些可以转换成不同的硬件接口:两个输入FIFO或一个多路复用的FIFO。我不确定这是否解决了我的问题。我想定义一个类型,它表示具有0个或多个输入和0个或多个输出的流处理器,并且能够以类似于使用箭头的单输入单输出处理器的方式组合这些处理器。我不确定我是否理解。假设您有一个类型为
S(a或b)(c或d)
的值,您想通过某种方式来确定它是单流处理器还是多路复用两个流的流处理器?我的目标是将这些流处理器转换为FPGA硬件。为此,我希望能够有两种不同的构造:一个处理器接受两个流,另一个处理器接受任意类型的单个流。这些可以转换为不同的硬件接口:两个输入FIFO或一个多路复用的FIFO。