Stream +parsec

class Monad m => Stream s m t | s -> t
parsec Text.Parsec.Prim
An instance of Stream has stream type s, underlying monad m and token type t determined by the stream Some rough guidelines for a "correct" instance of Stream: * unfoldM uncons gives the [t] corresponding to the stream * A Stream instance is responsible for maintaining the "position within the stream" in the stream state s. This is trivial unless you are using the monad in a non-trivial way.
data StreamPermParser s st a
parsec Text.Parsec.Perm
The type StreamPermParser s st a denotes a permutation parser that, when converted by the permute function, parses s streams with user state st and returns a value of type a on success. Normally, a permutation parser is first build with special operators like (<||>) and than transformed into a normal parser using permute.