<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br>My statements refer not to the FFI, but as I said, to "FFI code". FFI-based libraries seldom compile without excessive amounts of work, they're often poorly documented, and in general they seem to be maintained much less than pure Haskell libraries. The FFI is necessary, of course, but in general I view it as a bootstrapping process leading to pure Haskell libraries -- a crutch you have to live with until you can afford to pay the price of walking.<br><br>Regards,<br><br>John<br><br>On Jan 8, 2009, at 3:15 PM, John Goerzen wrote:<br><br><blockquote type="cite">On Thu, Jan 08, 2009 at 11:14:18AM -0700, John A. De Goes wrote:<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. Rather than coding through<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">That is an extraordinarily cruel, and inaccurate, sweep of FFI.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I've worked with C bindings to several high-level languages, and I<br></blockquote><blockquote type="cite">must say that I like FFI the best of any I've used. &nbsp;It's easy to use<br></blockquote><blockquote type="cite">correctly, stable, and solid. &nbsp;If anything, it suffers from<br></blockquote><blockquote type="cite">under-documentation.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">The whole point of FFI is to bring other languages into the Haskell<br></blockquote><blockquote type="cite">fold. &nbsp;So you can, say, talk to a database using its C library and<br></blockquote><blockquote type="cite">wind up putting the strongly-typed HaskellDB atop it. &nbsp;Or you can<br></blockquote><blockquote type="cite">write an MD5 algorithm in C and make it look like a regular Haskell<br></blockquote><blockquote type="cite">function.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><blockquote type="cite">You can indeed fit a square peg in a round hole, if you pound hard<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">enough. That doesn't mean it's a good thing to do.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">And with that, I fully agree.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">-- Joh<br></blockquote><div><font class="Apple-style-span" color="#144FAE"><br></font></div></body></html>