[Haskell-cafe] Library design around FFI library
Marco Zocca
zocca.marco at gmail.com
Thu May 21 04:22:11 UTC 2015
I meant
newtype Ah = Ah (Ptr Ah)
not
data Ah = Ah (Ptr Ah)
Thanks
On 21 May 2015 at 06:20, Marco Zocca <zocca.marco at gmail.com> wrote:
> I'm implementing the low-level interface to a large C library (using c2hs).
>
> The C functions can be broadly classified by:
> *) the main datastructure they operate on, e.g.
> returnType AFunction (A* a, ...);
> *) creation, modification, read access, destruction operations for
> each of these datastructures, following a common pattern:
> ACreate(), ASet1(), ASet2(), .., ARead(), ADestroy(), BCreate(), etc.
>
> The library rests on top of MPI, so there are e.g. AScatterBegin(),
> AScatterEnd() function pairs that account for potentially large delays
> associated with computing and moving data around.
>
> On the Haskell side, the C pointer types are represented as e.g.
> data Ah = Ah (Ptr Ah)
> deriving instance Storable Ah
>
> and e.g. a Create function returns the representation of the fresh
> pointer along with the usual integer error code:
> ahCreate :: MPIComm -> IO (Ah, Err)
>
>
> What abstraction may I use to capture logic such as:
> *) separate read-only functions from the potentially overwriting ones
> *) guarantee precedence relations (e.g. computation can only occur
> after initialization)
> *) collect or even compose error codes, letting computation go through
> iff Err==0 (e.g. a n-ary Maybe ?) Sequencing in the IO monad causes
> all effectful functions to run and return their result and/or error
> code.
>
> All feedback is welcome;
> Thank you in advance
More information about the Haskell-Cafe
mailing list