
Maybe I'm just being blind here, but I don't see a monad transformer (or even a monad) in the standard libraries for producing "unique" values. Have I missed something? Related, I don't see a monad for gradually consuming input. We've got the Reader monad, but that appears to just give you global access to a single monolithic value. That value could be some kind of collection, but there's no way to track where you've read up to (or efficiently access that point). We've got Parsec, which is a pretty efficient and powerful text parser. But what if you don't need full parsing capabilities? You just need to consume input, but you're not exactly sure where you're going to consume it? The Writer monad seems to let you incrimentally write values out, but there's no matching monad for incrimentally reading stuff back in. (I guess ultimately you can build all these specialised monads out of the general State monad if you want. I'm just surprised they're not already defined somewhere...)