The type of "SP.mapM_ putStrLn str" is IO (), so I don't think "SP.length_ (SP.mapM_ putStrLn str)" type checks, unless I'm somehow misreading your code.

Anyway, I just realized I can use SP.copy:

  do
    l <- SP.mapM_ putStrLn $ SP.length_ $ SP.copy str
   print l

"l <- SP.length_ $ SP.mapM_ putStrLn $ SP.copy str" also works.


On Wed, Jun 3, 2020 at 3:23 PM Tom Ellis <tom-lists-haskell-cafe-2017@jaguarpaw.co.uk> wrote:
On Wed, Jun 03, 2020 at 03:04:59PM +0800, ☂Josh Chia (謝任中) wrote:
> I want to putStrLn each element and then print the length of str
[...]
> doit :: Stream (Of String) IO () -> IO ()
> doit str =
>   do
>     SP.mapM_ putStrLn str
>     SP.length_ str >>= print

Isn't it

    SP.length_ (SP.mapM_ putStrLn str) >>= print
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.