在管道内运行消费者

Nik*_*kov 4 haskell haskell-pipes

我需要组合一个消费者和一个管道,以便消费者的输出将输入管道的输入.

我想这可以用这样的组合器来解决:

Consumer i m r -> (r -> Producer o m r') -> Pipe i o m r'
Run Code Online (Sandbox Code Playgroud)

或这个:

Consumer i m i' -> Pipe i' o m r -> Pipe i o m r
Run Code Online (Sandbox Code Playgroud)

或者如下所示的提升功能:

Consumer i m r -> Pipe i o m r
Run Code Online (Sandbox Code Playgroud)

或者像这样:

Consumer i m o -> Pipe i o m r
Run Code Online (Sandbox Code Playgroud)

我试过consumer >~ pipe没有成功.那么如何处理呢?

Gab*_*lez 5

对于你的第一个类型的签名,如果你ConsumerProducer使用多态类型同义词Consumer'Producer',然后Combinator的你想要的是(>>=):

(>>=) :: Pipe i o m r -> (r -> Pipe i o m r') -> Pipe i o m r'
Run Code Online (Sandbox Code Playgroud)

一个Consumer' i m r将类型检查作为Pipe i o m r.同样,Producer' o m r'将类型检查作为Pipe i o m r'.