Hi Brandon, indeed in my example if you add: *b <- evaluate a* after the definition of "a" it works. However, in my original program it doesn't work, I suppose because I interpret the user submitted code (here "*let (a::String) = a" * for the example) via Hint and Hint-server, and the interpretation must be done in another thread... Best, Corentin On Mon, Dec 24, 2012 at 3:46 PM, Brandon Allbery <allbery.b@gmail.com>wrote:
On Mon, Dec 24, 2012 at 8:45 AM, Corentin Dupont < corentin.dupont@gmail.com> wrote:
*execBlocking :: MVar (Maybe MyData) -> IO () execBlocking mv = do let (a::String) = a --If you uncomment the next line, it will work --putStrLn $ show a putMVar mv (Just $ MyData a "toto")*
It's laziness, yes; you need to do something along the lines of
let a = length a `seq` a
or possibly Control.Exception.evaluate needs to be involved somewhere.
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net