Starting the consumer inside the pipe

I need to compose the consumer and the handset so that the consumer output provides the channel input signal.

I think this could be solved using a combinator:

Consumer i m r -> (r -> Producer o m r') -> Pipe i o m r'

or that:

Consumer i m i' -> Pipe i' o m r -> Pipe i o m r

or lifting functions, for example:

Consumer i m r -> Pipe i o m r

or like this:

Consumer i m o -> Pipe i o m r

I tried to do consumer >~ pipewithout success. So how to approach this?

+4
source share
2 answers

Something similar to your signature Consumer i m o -> Pipe i o m rcan be done as follows:

{-# LANGUAGE RankNTypes #-}
import Pipes

foo :: Monad m => Consumer' i m o -> Pipe i o m ()
foo consumer = consumer >>= yield

Consumer', , " ", Pipe, yield s. , .

Consumer i m r -> Pipe i o m r, , :

iden :: Monad m => Consumer' i m r -> Pipe i o m r
iden consumer = consumer
+4

, Consumer Producer Consumer' Producer', (>>=):

(>>=) :: Pipe i o m r -> (r -> Pipe i o m r') -> Pipe i o m r'

A Consumer' i m r Pipe i o m r. , a Producer' o m r' Pipe i o m r'.

+5

Source: https://habr.com/ru/post/1548377/


All Articles