
Am Samstag, 2. Februar 2008 schrieb Tim Newsham:
I am working on haskell bindings to C functions using FFI. I have a callback function that returns "IO ()". When I pass in the callback function: foo = printf "foo"
it crashes (is there an easy way to debug this exception using ghc6.8.2?) bot: SilcClient_d1al: uncaught exception
however, if I pass in the callback function: foo = do printf "foo" return ()
it does not crash.
I suspect this has to do with printf returning 'undefined' if you use it with an IO type. Something in the code looks at the result and crashes. Your second version is equivalent to printf "foo" >>= \_ -> return (), i.e. it never evaluates printf's result but returns () instead. Fixing the first version would require some changes to Text.Printf, restricting the 'a' in PrintfType (IO a). HTH, Lukas