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