I'm not sure if [EMAIL PROTECTED] is the appropriate place for an
        observation/opinion piece - it was the only mailing list mentioned
        on the FFI specs release page and in the specs themselves.
        If there's a more appropriate mailing list for this commentary,
        let me know.

        First some background info...

        Haskell has been my first PL of choice since April 2000 but have
        been swatting up on the language and related topics since April
        1999, so I have a general overview of most of the concepts behind
        the language and FP in general. "Amateur software research and
        development" is currently my main recreation (for better or
        worse!). My primary Haskell system is Hugs, with occasional
        but slowly increasing usage of HBI & HBC.

        Enough background...

        From what I've read, the FFI's approach to achieving
        interoperability looks like The Death Of One Thousand Cuts for
        Haskell. This is most clearly demonstrated by those laughable
        special identifiers (page 3) denoting specific call conventions
        which future Haskell implementations would have to be contorted
        into supporting. (what will be next? "chash","asm","intercal",
        "vb"..?)

        From http://www.haskell.org/ghc/overview.html:

                "We think that Haskell is a great language
                 to write applications in, and are dead keen for
                 GHC to be used for this purpose."

        If we all accept this statement for all mature Haskell compilers
        the we must hold our ground - rather than dropping down to the
        standards of other languages, those languages come up to the
        standard of Haskell.

        The mechanism to do this already exists in Haskell, but its use
        has hitherto been confined to Haskell - module imports.

        The interoperability challenge then becomes: how do I bundle up
        that C/C++/.NET/Java/etc library into a Haskell module?

        Encapsulated as Haskell modules, old libraries can then
        access and be accessed by code from other Haskell modules
        using the standard import/export mechanism.

        So instead of having Haskell implementations handle the calling
        conventions of C, C++, Java, .NET, etc, the Haskell calling
        convention is handled by the Haskell module encapsulators for
        C, C++, Java, .NET, etc, hence moving the complexity out
        of already-complicated Haskell implementations into separate
        libraries or modules.



        The problem of Haskell interoperability is reminiscent of the
        problem regarding numeric types during the original definition
        of Haskell: how to have overloaded arithmetic operators over
        separate numeric types (unlike Miranda(TM)) which could be used
        to define new overloaded functions (unlike Standard ML).

        In this case the problem becomes: how to enable foreign code
        access between Haskell and other languages without rewriting
        the Haskell-side access mechanisms for each language.

        Type classes were the adopted solution then - perhaps they are
        the solution now:

                data C          =  ....
                data CPlusPlus  =  ....
                data Java       =  ....
                data DotNET     =  ....
                        :
                        :

                class Foreign l where ....

                instance Foreign C where ....
                instance Foreign CPlusPlus where ....
                instance Foreign Java where ....
                instance Foreign DotNET where ....
                        :
                        :


        Anthony Travers (amt DASH public AT dodo DOT com DOT au)
_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi

Reply via email to