[Haskell-beginners] Conduit composition

David McBride toad3k at gmail.com
Wed Apr 10 00:54:10 CEST 2013


The reason is because the operator $= puts together a source and a conduit
and returns a new source.

The operator =$= is used to combine two conduits into another conduit.

With $= if you try to put two conduits together, the underlying types just
won't match up.  They don't match up specifically to tell you that you are
not quite doing it correctly.  It is trying to match the first argument to
a source, which has its input type restricted to ().  Since you have a
string there, then it complains.

So try display = CL.iterM putStrLn =$= CL.iterM putStrLn  which does
exactly what you were looking for.


On Tue, Apr 9, 2013 at 6:34 PM, Ovidiu D <ovidiudeac at gmail.com> wrote:

> Given the following works as expected (i.e. prints the value twice):
>
> main =
>     Conduit.sourceList [1..14]
>     $= Conduit.map show
>     $= Conduit.iterM putStrLn
>     $= Conduit.iterM putStrLn
>     $$ Conduit.sinkNull
>
> I would expect the following to work as well:
> main =
>     Conduit.sourceList [1..14]
>     $= Conduit.map show
>     $= display
>     $$ Conduit.sinkNull
>
> display = Conduit.iterM putStrLn $= Conduit.iterM putStrLn
>
> ...but I get the compilation error:
> Couldn't match expected type `String' with actual type `()'
>     Expected type: Conduit.Conduit String m0 a0
>       Actual type: Conduit.Source IO ()
>     In the second argument of `($=)', namely `display'
>     In the first argument of `($$)', namely
>       `Conduit.sourceList [1 .. 14] $= Conduit.map show $= display'
>
> I don't understand why the type of display is inferred to a
> Conduit.Source. Can somebody please explain?
>
> What I want is to have readable names for certain segments in my pipe. Is
> that possible?
>
> Thanks,
> ovidiu
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130409/f6727d64/attachment.htm>


More information about the Beginners mailing list