[Haskell-cafe] HDF5 binding
mokus at deepbondi.net
Fri Mar 4 15:28:28 CET 2011
On Mar 4, 2011, at 8:25 AM, Ferenc Wagner wrote:
> This is fairly extensive indeed! I got nowhere near this, but also
> a somewhat different angle, especially by using StorableArrays for
> passing arrays around (I used HDF5 in conjunction with LaPack). I
> experienced with going a little higher level here and there.
> aren't implemented yet, because that would require making location
> ids a
> type class. An unsolved problem is the safe representation of
> ranks: I
> went for generality by using lists for indexing, but it would be
> nice to
> express dimensionality constraints in the types (with sane syntax).
> Maybe there's a handy technique for this, I didn't explore the field.
> Talking about indexing, choosing Fortran convention seems to be a
> mistake in retrospect, but that's no big deal.
I've skimmed through your code, it looks good. It's definitely a bit
higher level than mine - mine is (intentionally) little more than a
bunch of types and foreign imports with names changed minimally,
mostly just uppercasing or lowercasing the "H5?" prefixes as needed.
That approach seems to work really well for large C interfaces (like
OpenGLRaw, etc.) if for no other reason than that it exposes the C
interface via Haskell's much-better type system and documentation
tools. I'll read through yours in more detail, it looks like there
are some good ideas there that I can apply when I start working on
> I attach my code so you can get a better idea what I'm talking about,
> maybe you can find some usable pieces. Separating the generic hid
> into specific newtypes worked out to some extent, but maybe isn't a
> idea at the lowest level (where the FFI makes it automatic). I'd need
> broader experience with the HDF5 API to tell.
My experience isn't especially broad either, but from what I've seen a
type-level approach for distinguishing hid_t usages ought to work, at
least most of the time. One thought I have is to use a phantom type
parameter at the lowest level, so that foreign imports can either
constrain it or not, as the situation seems to call for.
More information about the Haskell-Cafe