
On Tue, 7 Apr 2009, Stephan Friedrichs wrote:
Henning Thielemann wrote:
is there a monad transformer to consume an input list? I've got external events "streaming into the monad" that are consumed on demand and I'm not sure if there's something better than a StateT.
I wondered that, too. I wondered whether there is something inverse to Writer, and Reader is appearently not the answer. Now I think, that State is indeed the way to go to consume a list. Even better is StateT List Maybe:
next :: StateT [a] Maybe a next = StateT Data.List.HT.viewL -- see utility-ht package
But a StateT provides the power to modify the list in other ways than reading the first element (modify (x:)). Maybe ParsecT is closer to what I'm looking for ;)
If you want to restrict the functionality of StateT, then wrap it in a newtype.