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, <dm-list-haskell-c...@scs.stanford.edu> 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 Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe