
Is there any follow up on this?
I was wondering what is the best way to sequence a number of sources
together. Anybody gave a further thought on this?
Regards,
Paul Liu
On Tue, Dec 27, 2011 at 3:45 PM, Aristid Breitkreuz
Hi all,
As you may have noticed, Michael Snoyman has been working on an alternative approach to I/O, called conduits. You can find it here:
https://github.com/snoyberg/conduit
When looking at the Source type (explained here: http://www.yesodweb.com/blog/2011/12/conduits), I noticed that they seem to behave "like lists", and naturally wondered if I could write a Monad instance for them. But first, let's have a brief look at the definition of Source:
data SourceResult a = Open a | Closed
data PreparedSource m a = PreparedSource { sourcePull :: ResourceT m (SourceResult a) , sourceClose :: ResourceT m () }
newtype Source m a = Source { prepareSource :: ResourceT m (PreparedSource m a) }
ResourceT deals with resource acquisition and releasing (making sure that all resources are released), and provides a an abstraction over IORef/STRef. For our purposes here, ResourceT is probably close enough to IO.
So now the question again is, can we write a Monad instance for this? I have been able to write join (concatenate) and return (a source with a single non-repeated) element.
https://gist.github.com/1525471
I _think_ it behaves properly like a Monad, but I'm not quite sure, and neither was Michael. Greg Weber then suggested bringing the question to this forum. What made the question difficult for me is that this would be a stateful Monad transformer, so I'm not quite sure how to test the Monad laws properly.
There's a second part to this question: If Source turns out not to be a Monad, is it possibly a ZipList-like Applicative? And either way, which is more useful: The list-like or the ziplist-like instances (of Applicative/Monad)?
Thank you,
Aristid
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Regards, Paul Liu