<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br>Hi Austin,<br><br>How do you know it's not your experience with FFI code that isn't biased? As far as I know, there has been no systematic attempt to document whether pure Haskell or FFI-based libraries are better designed and better maintained. Which means your statements come from your experience, and my statements come from my experience, and the truth is probably somewhere in between.<br><br>In my experience, FFI code is often based on bulk translation of C header files into the IO monad. It requires an exact version of a library to work (usually much older than the current), it does not compile out of the box, there's scant documentation, and very little high-level design has been imposed on the low-level C interface (may as well use C!). Exceptions to this rule, there are, but as I said before, my experience leads me to believe they *are* exceptions to a *general* rule.<br><br>Regards,<br><br>John<br><br>On Jan 8, 2009, at 3:47 PM, Austin Seipp wrote:<br><br><blockquote type="cite">Excerpts from John A. De Goes's message of Thu Jan 08 12:14:18 -0600 2009:<br></blockquote><blockquote type="cite"><blockquote type="cite">But really, what's the point? FFI code is fragile, often uncompilable<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">and unsupported, and doesn't observe the idioms of Haskell nor take<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">advantage of its powerful language features.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">This is a completely unfair generalization. The FFI is an excellent<br></blockquote><blockquote type="cite">way to interoperate with an extraordinary amount of external<br></blockquote><blockquote type="cite">libraries, and if you ask me, it's *worth* taking those pieces of C<br></blockquote><blockquote type="cite">code and wrapping them up in a nice, safe haskell interface. I will also<br></blockquote><blockquote type="cite">mention that Haskell has *the* simplest FFI I have ever used, which to<br></blockquote><blockquote type="cite">me only means it's easier to get it right (the fact that there are<br></blockquote><blockquote type="cite">customized *languages* like e.g. cython to make writing python<br></blockquote><blockquote type="cite">extensions easier makes me wonder.)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I suggest you take a look at the haskell llvm bindings - they are<br></blockquote><blockquote type="cite">extraordinarily well documented, and the high level interface uses<br></blockquote><blockquote type="cite">*many* haskell idioms that make the library safe and easy to use:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/llvm-0.4.2.0">http://hackage.haskell.org/cgi-bin/hackage-scripts/package/llvm-0.4.2.0</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">This code most certainly takes advantage of powerful features and<br></blockquote><blockquote type="cite">idioms that only Haskell can provide. Please do not take your bad<br></blockquote><blockquote type="cite">experiences with a few crappy binding (or not even crappy bindings,<br></blockquote><blockquote type="cite">perhaps bindings that just aren't very abstract) and extend them to<br></blockquote><blockquote type="cite">the bindings that are excellent with a sweeping statement like that.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Austin<br></blockquote><blockquote type="cite">_______________________________________________<br></blockquote><blockquote type="cite">Haskell-Cafe mailing list<br></blockquote><blockquote type="cite"><a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br></blockquote><blockquote type="cite"><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br></blockquote><div><font class="Apple-style-span" color="#144FAE"><br></font></div></body></html>