--
You received this message because you are subscribed to the Google Groups "Haskell Pipes" group.
To unsubscribe from this group and stop receiving emails from it, send an email to haskell-pipe...@googlegroups.com.
To post to this group, send email to haskel...@googlegroups.com.
mapsM :: (Monad m, Functor f) => (forall x. f x -> m (g x)) -> Stream f m r -> Stream g m r
--
You received this message because you are subscribed to the Google Groups "Haskell Pipes" group.
To unsubscribe from this group and stop receiving emails from it, send an email to haskell-pipe...@googlegroups.com.
To post to this group, send email to haskel...@googlegroups.com.
> A recursive user-defined function will
> disrupt fusion in the pipeline
Right I was thinking of cases where
disrupting the pipeline might be a
problem. I shouldn't have just mentioned
recursive definitions, but also the use
of the monad instance. In the case of
stream-fusion/ co-church-encoding sorts
of cases, the monad instance is often
itself kind of dreadful; you do
something like pack the old stream as
the hidden state of a new stream, rather
than using Int and StrictMaybe Int and
sensible things like that for the stream
state. (This is why ghc rejected a
stream-fusion Data.List, if I
understand; the literature is always
talking about concatMap.)
But it seems strange to have a producer
concept where you advise the user not to
make yield statements! It's sort of the
whole point that they can ... or maybe
I'm wrong about that.
Gabriel's approach, if I understand,
tries to do as well by the compiler as one
can, *given* that practically everything the
user will give to it will be a mass of recursive
loops that employ the monad instance
and so on. It isn't like a fusion approach which
aims to produce a prelude the user won't
depart from.
But I don't know, that's the picture I ended up with.
Michael