Thanks David,
Right - it invokes its iter repeatedly because mkInumC does that and mkInum is
defined as:
mkInum = mkInumC id noCtl
So to do it all manually is:
inumReverseLines :: (Monad m) => Inum L.ByteString L.ByteString m a
inumReverseLines = mkInumM $ loop where
loop = do
eof <- atEOFI
unless eof $ do
line <- lineI
ifeed (L.concat [L.reverse line, C.pack "\n"])
loop
Cheers,
-John
On 1 July 2011 01:20, <[email protected]> wrote:
> At Thu, 30 Jun 2011 23:53:02 +1000,
> John Ky wrote:
> >
> > But all I've done is:
> >
> > enum |$ inumReverseLines .| iter
> >
> > inumReverseLines = mkInum $ do
> > line <- lineI
> > return (L.reverse (L.concat [line, C.pack "\n"]))
>
> mkInum repeatedly invokes its iter argument so as to keep producing
> chunks. If you want to reverse only one line, it might be easiest to
> use something along the lines of:
>
> mkInumM $ do
> line <- lineI
> ifeed (L.reverse (L.concat [line, C.pack "\n"]))
>
> mkInumM is a more manual Inum construction function that doesn't
> automatically do things like loop or handle EOF conditions.
>
> David
>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe