
Newbie here working on a little program for fetching podcasts. I've been using the MissingH.Cmd module in concert with curl to download the RSS feeds like this:
fetchFeed :: Subscription -> IO (Either Error [Episode]) fetchFeed sub = do (pid, feed) <- pipeFrom "curl" (curlOpts ++ ["--url", (slocation sub)]) let eps = parseEpisodes (stitle sub) feed forceSuccess pid return eps
According to the API docs I have to forceSuccess pid *after* I use the
data. Will this construct do that, or does the compiler have free reign
to move the line beginning 'let ...' wherever it feels?
It seems to work occasionally for me but then just hangs, so I thought
this might be the problem.
Cheers,
D.
--
Dougal Stanton

Dougal Stanton wrote:
Newbie here working on a little program for fetching podcasts. I've been using the MissingH.Cmd module in concert with curl to download the RSS feeds like this:
First off, check out http://quux.org/devel/hpodder -- it is a podcast downloader written in Haskell that uses MissingH.Cmd. And Curl, Might just do what you want.
fetchFeed :: Subscription -> IO (Either Error [Episode]) fetchFeed sub = do (pid, feed) <- pipeFrom "curl" (curlOpts ++ ["--url", (slocation sub)]) let eps = parseEpisodes (stitle sub) feed forceSuccess pid return eps
According to the API docs I have to forceSuccess pid *after* I use the data. Will this construct do that, or does the compiler have free reign to move the line beginning 'let ...' wherever it feels?
No, it won't. I'd suggest adding something like: evaluate (length eps) before the forceSuccess. What happens is that, since Haskell is lazy, it won't actually consume the data from the pipe until it is needed -- which looks like it could even be after this function returns. forceSuccess waits for the process to die. The process won't die until you've consumed all its output. Therefore your program will hang at forceSuccess. -- John
participants (2)
-
Dougal Stanton
-
John Goerzen