Modification to foreign import/export

malcolm-ffi at cs.york.ac.uk malcolm-ffi at cs.york.ac.uk
Mon Feb 12 12:27:36 EST 2001


> > Is it reasonable to require that only foreign declarations of
> > a *single* foreign language are allowed per Haskell module?
> 
> We can have some declaration
> specifying the context of *following* foreign declarations. Another
> such declaration can change the context later in the module.

Please no!  The foreign declaration context should be global,
no matter where the declaration occurs in the file; it should not
depend on an arbitrary ordering of text.  To depend on ordering would
make the sources difficult to comprehend, and introduce unnecessary
complexity into the compiler.

> Here is a concrete proposal:
> 
> foreign language "c",

I think the quotes around the language name are redundant - why not
just
  foreign language C
?

> foreign language "c",
>     include "<ncurses/curses.h>",
>     library "ncurses"

I quite like the idea of keyword/string pairs.  I'm not sure how you
would propose to use the layout rule here.  To make them slightly
easier to parse, why not make them like named-field bindings perhaps?

  foreign language C
      { include="<ncurses/curses.h>"
      , library="ncurses"
      }

I suppose in the case where the C header was local, the string would
need to use the Haskell double-quoting mechanism?

        include="\"local_header.h\""

> I hope all interesting parameters in the future will fit in the syntax
> of keyword/string pairs, with the string being optional (some keywords
> are just boolean switches), or perhaps with multiple strings separated
> by spaces (multiple headers/libraries could be specified that way).

For booleans, use booleans

        flag=True

and for multiple strings, use tuples?

        searchpaths=("dir1","dir2")

Regards,
    Malcolm




More information about the FFI mailing list