
You may get useful help from Haskell Cafe. But if you can produce a cut-down example without complex dependencies, we could also look at it. Simon | -----Original Message----- | From: haskell-cafe-bounces@haskell.org [mailto:haskell-cafe- | bounces@haskell.org] On Behalf Of Jeroen van Maanen | Sent: 15 September 2010 10:13 | To: Haskell Café | Subject: [Haskell-cafe] try, seq, and IO | | The past year I have been working on a port of my machine learning project | named LExAu from Java to Haskell. I'm still very glad I took the jump, | because the complexity curve appears to be log shaped rather than exp shaped. | In one year I almost got to the functionality that had taken me five years to | produce in Java (of course it helped a lot that I had a working prototype | this time). | | There is one thing that still bothers me though: when I write seq or $! it | doesn't seem to have any effect! | | Currently I am trying to add some exception handling to help me debug the | system, but the code that I managed to produce depends on the logging | statement to produce the desired result. :-( It looks like this, and only | works when I uncomment the line '-- logger "Check sum": [...]', otherwise the | exception is caught by the try around the body of the thread that this code | runs in: | | do logger "Received update" [showString label, logs update] | result <- | try $! | do maybeUpdatedModel <- return $ f update startModel | theCheckSum <- return $ liftM checkSum maybeUpdatedModel | -- logger "Check sum" [showString label, shows theCheckSum] | return $! seq theCheckSum maybeUpdatedModel | maybeNextModel <- | case result of | Right theMaybeNextModel -> return theMaybeNextModel | Left exception -> | do let exc :: SomeException | exc = exception | logger "Exception" [showString label, shows exception] | return Nothing | logger "Maybe next model" [showString label, logs maybeNextModel] | | For more context see: | | | http://lexau.svn.sourceforge.net/viewvc/lexau/branches/totem/src/LExAu/Pipel... | ne/Concurrent.hs?revision=326&view=markup | | after line 241. | | Can someone explain why a few showStrings a shows and a putStrLn are more | effective in forcing the check sum to be computed (which necessarily | evaluates the complete updated model and reveals the lurking exception) than | the seq on the line just below the logging statement? | | Cheers, Jeroen