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.