[Haskell-cafe] Parsec3 stream properties

Philippa Cowderoy flippa at flippac.org
Tue Feb 5 23:49:18 EST 2008

I'm having a little difficulty finding full properties for Parsec3's 
Stream class, largely because I don't want to overspecify it with regard 
to side-effects. Here's the class:

>  class Stream s m t | s -> t where
>    uncons :: s -> m (Maybe (t,s))

The idea is that: 

* unfoldM uncons gives the [t] corresponding to the stream

* Assuming no relevant side-effects, unconsing the same value twice will 
yield the same result

What's a relevant side-effect? Well, that's up to the stream and the monad 
it's built in - but unconsing once shouldn't affect the result of 
unconsing a second time unless you've found something fiendishly clever 
that I haven't thought of. Using stream mutability to implement a 
programming language from within the parsing monad is not a good idea, 
though no doubt someone'll do it anyway!

flippa at flippac.org

Society does not owe people jobs.
Society owes it to itself to find people jobs.

More information about the Haskell-Cafe mailing list