
Don Stewart
Modify the 'unsafe' inports to be 'safe'? I don't think HDBC is going to call back in, so should be fine. John?
For those who are puzzled, Don is suggesting that foreign import ccall unsafe "foo" :: Bar -> Baz should simply be changed to foreign import ccall safe "foo" :: Bar -> Baz And in case anyone is wondering whether fiddling with safety declarations is entirely wise: "unsafe" means I, the programmer, guarantee that this foreign function cannot call back into Haskell land, so you, the compiler, are free to do unsafe things when implementing the call. "safe" means I the programmer, cannot guarantee that this foreign function is safe, so please, you the compiler, make sure that you add extra checks and assurances to ensure that the call really will be safe in case it calls back into Haskell land. The terminology seems counter-intuitive, but in other other words, a "safe" call is slower but more flexible, an "unsafe" call is fast and dangerous. Therefore it is always OK to convert an "unsafe" declaration into a "safe" one, but never OK to convert from "safe" to "unsafe" without looking at what the foreign side actually does. Regards, Malcolm