[Haskell] Re: ANN: HDBC (Haskell Database Connectivity)

Simon Marlow simonmar at microsoft.com
Thu Jan 5 05:56:50 EST 2006

John Goerzen wrote:
> I think you have that backwards, but I'm unsure.  According to the FFI
> spec, section 3.3:
>   "Optionally, an import declaration can specify, after the calling
>   convention, the safety level that should be used when invoking an
>   external entity. A safe call is less efficient, but guarantees to
>   leave the Haskell system in a state that allows callbacks from the
>   external code. In contrast, an unsafe call, while carrying less
>   overhead, must not trigger a callback into the Haskell system."
> There is no reason for any of these calls to trigger a callback into
> Haskell, so they can all be imported unsafe for greater efficiency.
> But it doesn't directly address threads, so I don't know what to make of
> that.  Do you have a reference?

In GHC, other threads cannot run while an unsafe foreign call is in
progress.  Our documentation is slightly lacking here, but this paper
describes it all:


If you have foreign calls which might block or just take a long time, it
is good practice not to mark them unsafe.


More information about the Haskell mailing list