Hi Edward, hello to all list members,
thank you for your comments, I will keep that in mind. There will be operations on matrices (and other objects) which modify the objects,
and those will be in IO or ST, I think.
However, I am planning to provide operations with matrices which guarantee that each involved matrix is not changed, but which may return new matrices.
All matrices have to be allocated, and that allocation can fail ... how does one usually go about this problem in Haskell?

Cheers,
Christian


2011/2/9 Edward Z. Yang <ezyang@mit.edu>
Hello Christian,

Assuming that the foreign library is based off of mutation on matrices,
there's not an easy way to export a nice pure interface to them, because
they're not actually persistent: if another thread goes and modifies
some pointer which you also have in pure code, referential transparency
is broken.  So you'll have to think carefully about what sorts of guarantees
you can (or want) to make to Haskell, and if you can't fulfill them, keep
the code in IO (or create your own monad for manipulating matrices).

Edward