[Haskell-cafe] Re: Stream processors

Ben Rudiak-Gould br276 at cl.cam.ac.uk
Thu Oct 21 16:17:04 EDT 2004


Peter Simons wrote:

 >Note my original definition:
 >
 >  type Buffer = (Ptr Word8, Int)
 >
 >  data StreamProc ctx a
 >    = SP
 >      { start  :: IO ctx
 >      , feed   :: ctx -> Buffer -> IO ctx
 >      , commit :: ctx -> IO a
 >      }
 >
 >So you would use it like this:
 >
 >  foo :: StreamProc ctx a -> IO a
 >  foo sp = do
 >    ctx <- start sp
 >    (ptr,n) <- "read buffer"
 >    ctx' <- feed sp ctx (ptr,n)
 >    ...
 >    commit sp ctx'

Sorry, my mistake. I was thinking of StreamProc as a type class.
What I meant was this:

  bar :: StreamProc ctx a -> IO (a,a)
  bar sp = do
    ctx <- start sp
    (ptr1,n1) <- ...
    (ptr2,n2) <- ...
    ctx1 <- feed sp ctx (ptr1,n1)
    ctx2 <- feed sp ctx (ptr2,n2)
    val1 <- commit sp ctx1
    val2 <- commit sp ctx2
    return (val1,val2)

My point is just that bar typechecks and therefore must do something
at runtime; what does it do? This is a genuine question -- I'm hoping
the answer will help me understand what you're trying to do here.

-- Ben



More information about the Haskell-Cafe mailing list