2017-10-09 70 views
1

阅读John Hughes的Generalising monads to arrows,我知道箭头可用于表示和组合流处理器与单输入和单输出。也可以使用成对来表示多个输入和输出,或使用ArrowChoice具有多个输入和输出的流处理器,如箭头所示

但是,使用一对意味着输入是一串对,它不足以表达处理速率不同的处理流。 ArrowChoice能够表达,但它在一个单独的“多路复用”两个流。

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

这可能吗?

回答

0

也许你可以使用These类型(from here),其被定义为:

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

这样你可以表达您正在接收一个数据流,或另一个或两者。

+0

我不确定这是否解决了我的问题。我想定义一种类型来表示具有0个或更多输入和0个或更多个输出的流处理器,并且能够组合这些处理器类似于使用箭头的单输入单输出处理器。 –

+0

我不确定我是否理解。假设你有'S(或b)(或c d)'类型的值,你想要某种方式来说明它是单流处理器还是流处理器复用两个流? – villou24

+0

我的目标是将这些流处理器转换为FPGA的硬件。为此,我希望能够有两种不同的结构:接受两个流的处理器和接受任一类型的单个流的处理器。这些可以转换为不同的硬件接口:两个输入FIFO或一个多路复用的FIFO。 –