2017-10-09 6 views
1

Lecture de John Hughes Generalising monads to arrows, je comprends que les flèches peuvent être utilisées pour représenter et combiner les processeurs de flux avec une seule entrée et une seule sortie. Il est également possible de représenter plusieurs entrées et sorties en utilisant des paires, ou en utilisant ArrowChoice. Cependant, l'utilisation d'une paire signifie que l'entrée est un flux de paires, ce qui n'est pas suffisant pour exprimer des flux de traitement qui arrivent à des taux de différence. ArrowChoice est capable d'exprimer cela, mais il "multiplexe" les deux flux dans un seul. Je cherche un moyen de combiner des flux avec plusieurs entrées et sorties multiples, tout en étant capable de distinguer entre le cas où les flux sont multiplexés et le cas des flux séparés.Les processeurs de flux avec plusieurs entrées et sorties en tant que flèches

Est-ce possible?

Répondre

0

Peut-être que vous pouvez utiliser le type These (from here) qui est défini comme:

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

De cette façon, vous pouvez exprimer que vous recevez un flux, ou l'autre, ou les deux.

+0

Je ne suis pas sûr que cela résout mon problème. Je veux définir un type qui exprime un processeur de flux avec 0 ou plusieurs entrées et 0 ou plusieurs sorties, et être capable de combiner de tels processeurs de la même manière que ce qui est fait pour les processeurs à sortie unique à sortie unique utilisant des flèches. –

+0

Je ne suis pas sûr de comprendre. Supposons que vous ayez une valeur de type 'S (Soit a b) (Soit c d)', vous aimeriez pouvoir dire si c'est un processeur de flux unique ou un processeur de flux qui multiplexe deux flux? – villou24

+0

Mon but est de traduire ces processeurs de flux en matériel pour FPGA. Pour cela, j'aimerais pouvoir avoir deux constructions différentes: un processeur qui accepte deux flux, et un processeur qui accepte un seul flux d'un type quelconque. Ceux-ci peuvent être traduits en différentes interfaces matérielles: deux FIFO d'entrée ou une FIFO multiplexée. –