[Haskell-cafe] Are libraries expected to enforce safe usage of thread-unsafe functions?

Benjamin Edwards edwards.benj at gmail.com
Tue Apr 12 08:48:39 UTC 2016

Presumably you will have a safe and an unsafe variant of each function, the
safe one calling its corresponding unsafe variant guarded by an appropriate
locking mechanism. Just export both and note why the unsafe variants are
marked "unsafe". Separating policy from implementation is always nice for
callers. Presumably they know their application and what they are willing
to pay for each call.


On Tue, 12 Apr 2016 at 08:57 Thomas Koster <tkoster at gmail.com> wrote:

> Hi friends,
> I am writing a library that has Handle-like values for resources that are
> not thread-safe (foreign state from a non-thread-safe C library). In other
> words, a resource can only be "used" by one Haskell thread at a time.
> Unless I take steps, if one shares the resource between concurrent Haskell
> threads, bad things will happen at runtime (even with a single-threaded
> runtime).
> Naturally, I want consumers to use my library safely, so I am considering
> making it safe for all by pessimistically enforcing safe usage with MVars.
> Is it common/expected that Haskell libraries enforce safe access like this?
> MVars are not free from cost, but are they cheap (i.e. almost as fast as
> no forced synchronization) as long as no blocking/rescheduling occurs?
> Thanks,
> --
> Thomas Koster
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160412/27625345/attachment.html>

More information about the Haskell-Cafe mailing list