fix Haskell 98 reference
[haskell-report.git] / report / ffi.verb
1 % The Haskell 98 Foreign Function Interface
2 % [An Addendum to the Definition of Haskell 98]
3 %
4 % Editor: Manuel M T Chakravarty
5 %
6 % Copyright [2002..2003] Manuel M T Chakravarty
7 %
8 % The authors intend this Report to belong to the entire Haskell community, and
9 % so we grant permission to copy and distribute it for any purpose, provided
10 % that it is reproduced in its entirety, including this Notice.  Modified
11 % versions of this Report may also be copied and distributed for any purpose,
12 % provided that the modified version is clearly presented as such, and that it
13 % does not claim to be a definition of the Haskell 98 Foreign Function
14 % Interface. 
15
16 % Changes since RC15:
17 % * 6.3: Footnote regarding __STDC_ISO_10646__ added to text introducing
18 %        `CWString'.
19 %
20 % Changes since RC14:
21 % * 6.2: CWChar -> CWchar
22 % * 6.3: - CWChar -> CWchar
23 %        - Stated explicitly that memory allocated by `newCString' and friends
24 %          can be deallocated by `Foreign.Marshal.Alloc.free'
25 %        - Improved documentation
26 %
27 % Changes since RC13:
28 % * 5.3: Fixed typo
29 % * 5.7: Fixed a mistake in the type of `peekByteOff' and `pokeByteOff' (the
30 %        type variable constrained by `Storable' must be different from the
31 %        parameter of the `Ptr')
32 % * 6.3: Improved documentation
33 %
34 % Changes since RC12:
35 % * Acks : Added John Meacham
36 % * 4.1.5: Bug fix courtesy of Wolfgang Thaller
37 % * 5.5  : Added `FinalizerEnvPtr', `newForeignPtrEnv', and
38 %          `addForeignPtrFinalizerEnv'
39 % * 6.3  : Added John Meacham proposal for `wchar_t' support as well localised
40 %          string marshalling; in particular, this adds `CWString' and
41 %          `CWStringLen' as well as the `CWString' and the `CAString' family
42 %          of marshalling routines.  In addition, `charIsRepresentable' was
43 %          added. 
44 %
45 % Changes since RC11:
46 % * 5.5: Swapped argument order of `newForeignPtr' and `addForeignPtrFinalizer'
47 %
48 % Changes since RC10:
49 % * 3.3  : Clarified use of foreign functions of pure type
50 % * 4.1.1: Clarified the meaning of foreign imports without a "&" that have a
51 %          non-functional type in Haskell
52 % * 5.1  : Clarified the scope of safe use of unsafePerformIO
53 % * 5.5  : "pre-emptive" dropped in footnote regarding finalizers; added
54 %          `newForeignPointer_' and renamed `foreignPtrToPtr' to
55 %          `unsafeForeignPtrToPtr'
56 % * Typos throughout
57 %
58 % Changes since RC9:
59 % * 1:     Mentioning interaction with foreign threads as an open problem.
60 % * 2 & 3: Removed `threadsafe' again, as the proposal for thread support is
61 %          still evolving and it is not yet clear whether a new safety level
62 %          is required.
63 % * 5.5:   Added the type synonym `FinalizerPtr' and rewrote the documentation
64 %          of finalizers.
65 % * 5.6:   Clarified the description of `StablePtr'
66 % * 5.8:   Added `finalizerFree'
67 % * 6.2:   All the types in CTypes must be newtypes that are exported
68 %          abstractly. 
69 %
70 % Changes since RC8:
71 % * 5.8: `MarshallAlloc.reallocBytes' is no longer permitted on memory
72 %        allocated with `alloca' or `allocaBytes'. 
73 % * 6.1: Deinitialisation of the RTS via `hs_exit()' followed by
74 %        (re)initialisation with `hs_init()' must be supported.
75 %
76 % Changes since RC7:
77 % * Clarified the lexis of C identifiers and C header file names
78 % * In `ForeignPtr', added `mallocForeignPtrArray' and `mallocForeignPtrArray0'
79 % * Clarified spec of allocations functions adding constraints taken from the
80 %   corresponding C routines
81 % * `mallocBytes' and `allocaBytes' must align memory sufficiently for any
82 %   basic foreign type that fits into the allocated block
83 % * Removed typos in the description of the module `ForeignPtr'
84 % * Added Peter Gammie to the list of acknowledged people
85 % * `addForeignPtrFinalizer' guarantees that finalizers for a single foreign
86 %   pointer are executed in the opposite order as they were added.
87 % * `Storable': Require that the size is divisible by the alignment
88 % * Added Ross Paterson to the list of acknowledged people
89 % * Added hs_free_fun_ptr() and hs_free_stable_ptr()
90 % * Changed order of arguments of `mkIOError' and `annotateIOError' to match
91 %   with the current implementation in GHC's FFI libraries.
92 %
93 % Changes since RC6:
94 % * Fixed typos
95 %
96 % Changes since RC5:
97 % * Author list: changed Alastair Reid's institution
98 % * 1.4:   Clarified the wording
99 % * 4.1:   Explicitly stated that access to pre-processor symbols is not
100 %          provided by the FFI
101 % * 4.1.1: Removed [lib] from impent syntax and discussion
102 % * 4.1.3: Added parentheses round FunPtr ft to make it easier to 
103 %          understand a tolerably complex type.
104 % * 4.1.4: Removed all mention of library objects; clarified that header files
105 %          do not impact the semantics of foreign calls, but may be required
106 %          for correct code generation by some systems
107 % * 5.2:   Clarified that all operations in Bits are member functions of the
108 %          type class.  Reverse the meaning of the sign of the second argument
109 %          for `rotate' and `shift' (this makes it the same as GHC used all
110 %          the time).  `bitSize' on `Integer' etc is now undefined.
111 % * 5.5:   Finalisers must be external functions to facilitate the
112 %          implementation on Haskell systems that do not support pre-emptive
113 %          concurrency.
114 %          Added mallocForeignPtr and mallocForeignPtrBytes.
115 % * 6:     Specified that HsBool==int in table2
116 %          Relabelled column 1 in table 3 (C symbol -> CPP symbol)
117 %          Replaced 0 and 1 with HS_BOOL_FALSE/TRUE
118 % * 6.1:   Clarified that nullPtr (nullFunPtr) coincides with (HsPtr) NULL and
119 %          (HsFunPtr) NULL, respectively.
120 %          Allowing multiple calls to hs_init() and clarified the constraints
121 %          on the relative timing between hs_set_argv() and
122 %          getProgName/getArgs. 
123 %          Added hs_perform_gc().
124 %
125 % Changes since RC4:
126 % * 5.6: Clarified documentation of `StablePtr's (RC 5)
127 %
128 % Changes between RC2 and RC4:
129 %
130 % * 5.8: Clarified documentation for `MarshalAlloc.free'.
131 % * 5.8: Added `MarshalAlloc.realloc'.
132 % * 3: Added the new safety level `threadsafe' with an explanation at the end
133 %   of 3.3.
134 % * 3: Replaced the nontermional `entity' by `impent' and `expent' to
135 %   distinguish between import and export entities (as they are defined
136 %   differently in later sections).
137 % * 3.2: Clarified the description of foreign types; so far, `IO ()' was
138 %   strictly speaking not included as a valid return type.  Currently,
139 %   functions of type `a -> ()' are included.  Do we want this?  Their use
140 %   might not be portable if they include side effects.
141 % * 4.1.5: New section discussing the traps & pitfalls of type promotion with
142 %   C bindings.
143
144 % TODO:
145 % * Implement HTMLization.  (Malcolm suggests using
146 %   <http://pauillac.inria.fr/~maranget/hevea/>)
147
148 % TODO after Version 1.0:
149 %
150 % * Review suggestions by Antony Courtney <antony@@apocalypse.org> re FFI
151 %   support for Java.
152
153 \section{Foreign Function Interface}
154 \label{ffi}
155
156 % Old FFI addendum text:
157 % The definition of Haskell 98~\cite{haskell98}, while being comprehensive with
158 % respect to the functional core language, does lack a range of features of more
159 % operational flavour, such as a foreign language interface, concurrency
160 % support, and fully fledged exception handling.  As these features are of
161 % central importance to many real world applications of the language, there is a
162 % danger that different implementations become de facto incompatible for such
163 % applications due to system-specific extensions of the core language.  The
164 % present FFI specification is aimed at reducing this risk by defining a simple,
165 % yet comprehensive extension to Haskell 98 for the purpose of interfacing to
166 % program components implemented in a language other than Haskell.
167
168 The Foreign Function Interface (FFI) has two purposes: it enables (1) to
169 describe in Haskell the interface to foreign language functionality and
170 (2) to use from foreign code Haskell routines.  More generally, its aim
171 is to support the implementation of programs in a mixture of Haskell and
172 other languages such that the source code is portable across different
173 implementations of Haskell and non-Haskell systems as well as
174 independent of the architecture and operating system.
175
176 % Old FFI addendum text:
177 % The design as presented in this report builds on experiences with a number of
178 % foreign function interfaces that, over time, have been provided by the major
179 % Haskell implementations.  Central in the final design was the goal to be
180 % comprehensive while being simple and minimising changes with respect to
181 % Haskell 98; the latter includes to avoid pollution of the name space with new
182 % keywords.  Consequently, as much as possible of the FFI functionality is
183 % realised in the form of libraries.  Simplicity generally overruled maximum
184 % convenience for the programmer as a design goal.  Thus, support for more
185 % convenient interface specifications is the domain of system-independent tools
186 % that generate code following the present specification.
187
188 \subsection{Foreign Languages}
189
190 The Haskell FFI currently only specifies the interaction between Haskell
191 code and foreign code that follows the C calling convention.  However,
192 the design of the FFI is such that it enables the modular extension of
193 the present definition to include the calling conventions of other
194 programming languages, such as C++ and Java.  A precise definition of
195 the support for those languages is expected to be included in later
196 versions of the language.  The second major omission is the definition
197 of the interaction with multithreading in the foreign language and, in
198 particular, the treatment of thread-local state, and so these details
199 are currently implementation-defined.
200
201 The core of the present specification is independent of the foreign language
202 that is used in conjunction with Haskell.  However, there are two areas where
203 FFI specifications must become language specific: (1) the specification of
204 external names and (2) the marshalling of the basic types of a foreign
205 language.  As an example of the former, consider that in C~\cite{C} a simple
206 identifier is sufficient to identify an object, while
207 Java~\cite{gosling-etal:Java}, in general, requires a qualified name in
208 conjunction with argument and result types to resolve possible overloading.
209 Regarding the second point, consider that many languages do not specify the
210 exact representation of some basic types.  For example the type @int@ in
211 C may be 16, 32, or 64 bits wide.  Similarly, Haskell guarantees
212 only that @Int@ covers at least the range \([-2^{29}, 2^{29} - 1]\) (Section~\ref{numbers}).  As
213 a consequence, to reliably represent values of C's @int@ in Haskell, we
214 have to introduce a new type @CInt@, which is guaranteed to match the
215 representation of @int@.
216
217 The specification of external names, dependent on a calling convention, is
218 described in Section~\ref{sec:extent}, whereas the marshalling of the basic
219 types in dependence on a foreign language is described in
220 Section~\ref{sec:marshalling}.
221
222 \subsection{Contexts}
223
224 For a given Haskell system, we define the \emph{Haskell context} to be the
225 execution context of the abstract machine on which the Haskell system is
226 based.  This includes the heap, stacks, and the registers of the abstract
227 machine and their mapping onto a concrete architecture.  We call any other
228 execution context an \emph{external context.}  Generally, we cannot assume any
229 compatibility between the data formats and calling conventions between the
230 Haskell context and a given external context, except where Haskell explicitly prescribes a specific data format.
231
232 The principal goal of a foreign function interface is to provide a
233 programmable interface between the Haskell context and external
234 contexts.  As a result Haskell threads can access data in external
235 contexts and invoke functions that are executed in an external context
236 as well as vice versa.  In the rest of this definition, external
237 contexts are usually identified by a calling convention.
238
239 \subsubsection{Cross Language Type Consistency}
240
241 Given that many external languages support static types, the question arises
242 whether the consistency of Haskell types with the types of the external
243 language can be enforced for foreign functions.  Unfortunately, this is, in
244 general, not possible without a significant investment on the part of the
245 implementor of the Haskell system (i.e., without implementing a dedicated type
246 checker).  For example, in the case of the C calling convention, the only
247 other approach would be to generate a C prototype from the Haskell type and
248 leave it to the C compiler to match this prototype with the prototype that is
249 specified in a C header file for the imported function.  However, the Haskell
250 type is lacking some information that would be required to pursue this route.
251 In particular, the Haskell type does not contain any information as to when
252 @const@ modifiers have to be emitted.  
253
254 As a consequence, this definition does not require the Haskell system to check
255 consistency with foreign types.  Nevertheless, Haskell systems are encouraged
256 to provide any cross language consistency checks that can be implemented with
257 reasonable effort.
258
259 \subsection{Lexical Structure}
260
261 The FFI reserves a single keyword @foreign@, and a set of special
262 identifiers.  The latter have a special meaning only within foreign
263 declarations, but may be used as ordinary identifiers elsewhere.
264
265 The special identifiers @ccall@, @cplusplus@, @dotnet@,
266 @jvm@, and @stdcall@ are defined to denote calling conventions.
267 However, a concrete implementation of the FFI is free to support additional,
268 system-specific calling conventions whose name is not explicitly listed here.
269
270 To refer to objects of an external C context, we introduce the following
271 phrases:
272 %
273 @@@
274 chname -> \{chchar\} @.@ @h@               & (\tr{C header filename})
275 cid    -> letter \{letter | ascDigit\}     & (\tr{C identifier})
276 chchar -> letter | ascSymbol_{\langle{}@&@\rangle{}}
277 letter -> ascSmall | ascLarge | @_@
278 @@@
279 %
280 The range of lexemes that are admissible for "chname" is a subset of
281 those permitted as arguments to the @#include@ directive in C.  In
282 particular, a file name "chname" must end in the suffix @.h@.  The
283 lexemes produced by "cid" coincide with those allowed as C identifiers,
284 as specified in~\cite{C}.
285
286 \subsection{Foreign Declarations}
287
288 The syntax of foreign declarations is as follows:
289 %
290 @@@
291 topdecl  -> @foreign@ fdecl
292 fdecl    -> @import@ callconv [safety] impent var @::@ ftype & (\tr{define varibale})
293          |  @export@ callconv expent var @::@ ftype & (\tr{expose variable})
294 callconv -> @ccall@ | @stdcall@ | @cplusplus@  & (\tr{calling convention})
295          | @jvm@ | @dotnet@
296          |  \mbox{\bf system-specific calling conventions}
297 impent   -> [string]
298 expent   -> [string]
299 safety   -> @unsafe@ | @safe@
300 @@@
301 %
302 There are two flavours of foreign declarations: import and export
303 declarations.  An import declaration makes an \emph{external entity,} i.e., a
304 function or memory location defined in an external context, available in the
305 Haskell context.  Conversely, an export declaration defines a function of the
306 Haskell context as an external entity in an external context.  Consequently,
307 the two types of declarations differ in that an import declaration defines a
308 new variable, whereas an export declaration uses a variable that is already
309 defined in the Haskell module.
310
311 The external context that contains the external entity is determined by the
312 calling convention given in the foreign declaration.  Consequently, the exact
313 form of the specification of the external entity is dependent on both the
314 calling convention and on whether it appears in an import declaration (as
315 "impent") or in an export declaration (as "expent").  To provide
316 syntactic uniformity in the presence of different calling conventions, it is
317 guaranteed that the description of an external entity lexically appears as a
318 Haskell string lexeme.  The only exception is where this string would be the
319 empty string (i.e., be of the form @""@); in this case, the string may be
320 omitted in its entirety.
321
322 \subsubsection{Calling Conventions}
323 \label{sec:call-conv}
324
325 The binary interface to an external entity on a given architecture is
326 determined by a calling convention.  It often depends on the programming
327 language in which the external entity is implemented, but usually is more
328 dependent on the system for which the external entity has been compiled.
329
330 As an example of how the calling convention is dominated by the system rather
331 than the programming language, consider that an entity compiled to byte code
332 for the Java Virtual Machine (JVM)~\cite{lindholm-etal:JVM} needs to be
333 invoked by the rules of the JVM rather than that of the source language in
334 which it is implemented (the entity might be implemented in Oberon, for
335 example).
336
337 Any implementation of the Haskell FFI must at least implement the C calling
338 convention denoted by @ccall@.  All other calling conventions are
339 optional.  Generally, the set of calling conventions is open, i.e., individual
340 implementations may elect to support additional calling conventions.  In
341 addition to @ccall@, Table~\ref{tab:callconv} specifies a range of
342 identifiers for common calling conventions.
343 %
344 \begin{table}[tbp]
345   \begin{center}
346     \begin{tabular}{|l|l|}
347       \hline
348       Identifier & Represented calling convention\\
349       \hline\hline
350       @ccall@ 
351       & Calling convention of the standard C compiler on a system\\
352       @cplusplus@
353       & Calling convention of the standard C{+}{+} compiler on a system\\
354       @dotnet@
355       & Calling convention of the \textsc{.net} platform\\
356       @jvm@ 
357       & Calling convention of the Java Virtual Machine\\
358       @stdcall@
359       & Calling convention of the Win32 API (matches Pascal conventions)\\
360       \hline
361     \end{tabular}
362     \caption{Calling conventions}
363     \label{tab:callconv}
364   \end{center}
365 \end{table}
366 %
367 Implementations need not implement all of these conventions, but if any is
368 implemented, it must use the listed name.  For any other calling convention,
369 implementations are free to choose a suitable name.
370
371 Only the semantics of the calling conventions @ccall@ and @stdcall@ are
372 defined herein; more calling conventions may be added in future versions
373 of Haskell.
374
375 It should be noted that the code generated by a Haskell system to implement a
376 particular calling convention may vary widely with the target code of that
377 system.  For example, the calling convention @jvm@ will be trivial to
378 implement for a Haskell compiler generating Java code, whereas for a Haskell
379 compiler generating C code, the Java Native Interface (JNI)~\cite{liang:JNI}
380 has to be targeted.
381
382 \subsubsection{Foreign Types}
383 \label{sec:foreign-types}
384
385 The following types constitute the set of \emph{basic foreign types}:
386 %
387 \begin{itemize}
388 \item @Char@, @Int@, @Double@, @Float@, and @Bool@ as
389   exported by the Haskell @Prelude@ as well as
390 \item @Int8@, @Int16@, @Int32@, @Int64@, @Word8@,
391   @Word16@, @Word32@, @Word64@, @Ptr a@, @FunPtr a@,
392   and @StablePtr a@, for any type @a@, as exported by @Foreign@
393   (Section~\ref{sec:Foreign}).
394 \end{itemize}
395 %
396 A Haskell system that implements the FFI needs to be able to pass these types
397 between the Haskell and the external context as function arguments and
398 results.
399
400 Foreign types are produced according to the following grammar:
401 %
402 @@@
403 ftype -> frtype
404       |  fatype \rightarrow ftype
405 frtype -> fatype
406        | @()@
407 fatype -> qtycon atype_1 \ldots atype_k & (k \geq 0)
408 @@@
409 %
410 A foreign type is the Haskell type of an external entity.  Only a subset of
411 Haskell's types are permissible as foreign types, as only a restricted set of
412 types can be canonically transferred between the Haskell context and an
413 external context.  A foreign type generally has the form
414 \[
415 \textit{at}_1@ -> @\cdots@ -> @\textit{at}_n@ -> @\textit{rt}
416 \]
417 where \(n\geq0\).  It implies that the arity of the external entity is $n$.
418
419 The argument types \(\textit{at}_i\) produced by "fatype" must be
420 \emph{marshallable foreign types;} that is, each \(\textit{at}_i\) is either
421 (1) a basic foreign type or (2) a type synonym or renamed datatype of a
422 marshallable foreign type.  Moreover, the result type \textit{rt} produced by
423 "frtype" must be a \emph{marshallable foreign result type;} that is, it
424 is either a marshallable foreign type, the type @()@, or a type matching
425 @Prelude.IO @$t$, where $t$ is a marshallable foreign type or @()@.
426
427 External functions are generally strict in all arguments.
428
429 \subsubsection{Import Declarations}
430 \label{sec:import}
431
432 Generally, an import declaration has the form
433 %
434 \[
435 @foreign@~@import@~c~e~v~@::@~t
436 \]
437 %
438 which declares the variable $v$ of type $t$ to be defined externally.
439 Moreover, it specifies that $v$ is evaluated by executing the external entity
440 identified by the string $e$ using calling convention $c$.  The precise form
441 of $e$ depends on the calling convention and is detailed in
442 Section~\ref{sec:extent}.  If a variable $v$ is defined by an import
443 declaration, no other top-level declaration for $v$ is allowed in the same
444 module.  For example, the declaration
445 \bprog
446 @
447 foreign import ccall "string.h strlen"
448    cstrlen :: Ptr CChar -> IO CSize
449 @
450 \eprog
451 introduces the function @cstrlen@, which invokes the external function
452 @strlen@ using the standard C calling convention.  Some external entities
453 can be imported as pure functions; for example,
454 \bprog
455 @
456 foreign import ccall "math.h sin"
457    sin :: CDouble -> CDouble.
458 @
459 \eprog
460 %
461 Such a declaration asserts that the external entity is a true function; i.e.,
462 when applied to the same argument values, it always produces the same result.
463
464 Whether a particular form of external entity places a constraint on the
465 Haskell type with which it can be imported is defined in
466 Section~\ref{sec:extent}.  Although, some forms of external entities restrict
467 the set of Haskell types that are permissible, the system can generally not
468 guarantee the consistency between the Haskell type given in an import
469 declaration and the argument and result types of the external entity.  It is
470 the responsibility of the programmer to ensure this consistency.
471
472 Optionally, an import declaration can specify, after the calling convention,
473 the safety level that should be used when invoking an external entity.  A
474 @safe@ call is less efficient, but guarantees to leave the Haskell system
475 in a state that allows callbacks from the external code.  In contrast, an
476 @unsafe@ call, while carrying less overhead, must not trigger a callback
477 into the Haskell system.  If it does, the system behaviour is undefined.  The
478 default for an invocation is to be @safe@.  Note that a callback into
479 the Haskell system implies that a garbage collection might be triggered after
480 an external entity was called, but before this call returns.  Consequently,
481 objects other than stable pointers (cf.\ Section~\ref{sec:StablePtr}) may be
482 moved or garbage collected by the storage manager.
483
484 \subsubsection{Export Declarations}
485
486 The general form of export declarations is
487 %
488 \[
489 @foreign@~@export@~c~e~v~@::@~t
490 \]
491 %
492 Such a declaration enables external access to $v$, which may be a value, field
493 name, or class method that is declared on the top-level of the same module or
494 imported.  Moreover, the Haskell system defines the external entity described
495 by the string $e$, which may be used by external code using the calling
496 convention $c$; an external invocation of the external entity $e$ is
497 translated into evaluation of $v$.  The type $t$ must be an instance of the
498 type of $v$.  For example, we may have
499 \bprog
500 @
501 foreign export ccall "addInt"   (+) :: Int   -> Int   -> Int
502 foreign export ccall "addFloat" (+) :: Float -> Float -> Float
503 @
504 \eprog
505 If an evaluation triggered by an external invocation of an exported Haskell
506 value returns with an exception, the system behaviour is undefined.  Thus,
507 Haskell exceptions have to be caught within Haskell and explicitly marshalled
508 to the foreign code.
509
510
511 \subsection{Specification of External Entities}
512 \label{sec:extent}
513
514 Each foreign declaration has to specify the external entity that is accessed
515 or provided by that declaration.  The syntax and semantics of the notation
516 that is required to uniquely determine an external entity depends heavily on
517 the calling convention by which this entity is accessed.  For example, for the
518 calling convention @ccall@, a global label is sufficient.  However, to
519 uniquely identify a method in the calling convention @jvm@, type
520 information has to be provided.  For the latter, there is a choice between the
521 Java source-level syntax of types and the syntax expected by JNI---but,
522 clearly, the syntax of the specification of an external entity depends on the
523 calling convention and may be non-trivial.
524
525 Consequently, the FFI does not fix a general syntax for denoting external
526 entities, but requires both "impent" and "expent" to take the
527 form of a Haskell "string" literal.  The formation rules for the values
528 of these strings depend on the calling convention and a Haskell system
529 implementing a particular calling convention will have to parse these strings
530 in accordance with the calling convention.
531
532 Defining "impent" and "expent" to take the form of a
533 "string" implies that all information that is needed to statically
534 analyse the Haskell program is separated from the information needed to
535 generate the code interacting with the foreign language.  This is, in
536 particular, helpful for tools processing Haskell source code.  When ignoring
537 the entity information provided by "impent" or "expent", foreign
538 import and export declarations are still sufficient to infer identifier
539 definition and use information as well as type information.
540
541 For more complex calling conventions, there is a choice between the user-level
542 syntax for identifying entities (e.g., Java or C{+}{+}) and the system-level
543 syntax (e.g., the type syntax of JNI or mangled C{+}{+}, respectively).  If
544 such a choice exists, the user-level syntax is preferred.  Not only because it
545 is more user friendly, but also because the system-level syntax may not be
546 entirely independent of the particular implementation of the foreign language.
547
548 The following defines the syntax for specifying external entities and their
549 semantics for the calling conventions @ccall@ and @stdcall@.  Other
550 calling conventions from Table~\ref{tab:callconv} are expected to be defined
551 in future versions of Haskell.
552
553
554 \subsubsection{Standard C Calls}
555 \label{sec:ccall}
556
557 The following defines the structure of external entities for foreign
558 declarations under the @ccall@ calling convention for both import and
559 export declarations separately.  Afterwards additional constraints on the type
560 of foreign functions are defined.
561
562 The FFI covers only access to C functions and global variables.  There are no
563 mechanisms to access other entities of C programs.  In particular, there is no
564 support for accessing pre-processor symbols from Haskell, which includes
565 @#define@d constants.  Access from Haskell to such entities is the
566 domain of language-specific tools, which provide added convenience over the
567 plain FFI as defined here.
568
569 \paragraph{Import Declarations}
570
571 For import declarations, the syntax for the specification of external entities
572 under the @ccall@ calling convention is as follows:
573 @@@
574 impent -> @"@ [@static@] [chname] [@&@] [cid] @"@ & (\tr{static function or address})
575        | @"@ dynamic @"@ & (\tr{stub factory importing addresses})
576        | @"@ wrapper @"@ & (\tr{stub factory exporting thunks})
577 @@@
578 The first alternative either imports a static function "cid" or, if
579 @&@ precedes the identifier, a static address.  If "cid" is
580 omitted, it defaults to the name of the imported Haskell variable.  The
581 optional filename "chname" specifies a C header file, where the
582 intended meaning is that the header file declares the C entity identified by
583 "cid".  In particular, when the Haskell system compiles Haskell to C
584 code, the directive
585 %
586 \begin{quote}
587   @#include "@"chname"@"@
588 \end{quote}
589 %
590 needs to be placed into any generated C file that refers to the foreign entity
591 before the first occurrence of that entity in the generated C file.
592
593 The second and third alternative, identified by the keywords @dynamic@
594 and @wrapper@, respectively, import stub functions that have to be
595 generated by the Haskell system.  In the case of @dynamic@, the stub
596 converts C function pointers into Haskell functions; and conversely, in the
597 case of @wrapper@, the stub converts Haskell thunks to C function
598 pointers.  If neither of the specifiers @static@, @dynamic@, or
599 @wrapper@ is given, @static@ is assumed.  The specifier
600 @static@ is nevertheless needed to import C routines that are named
601 @dynamic@ or @wrapper@.
602
603 It should be noted that a static foreign declaration that does not import an
604 address (i.e., where @&@ is not used in the specification of the external
605 entity) always refers to a C function, even if the Haskell type is
606 non-functional.  For example, 
607 \bprog
608 @
609 foreign import ccall foo :: CInt
610 @
611 \eprog
612 refers to a pure C function @foo@ with no arguments that returns an
613 integer value.  Similarly, if the type is @IO CInt@, the declaration
614 refers to an impure nullary function.  If a Haskell program needs to access a
615 C variable @bar@ of integer type,
616 \bprog
617 @
618 foreign import ccall "&" bar :: Ptr CInt
619 @
620 \eprog
621 must be used to obtain a pointer referring to the variable.  The variable can
622 be read and updated using the routines provided by the module @Foreign.Storable@
623 (cf.\ Section~\ref{sec:Storable}).
624
625 \paragraph{Export Declarations}
626
627 External entities in "ccall" export declarations are of the form
628 %
629 @@@
630 expent -> @"@ [cid] @"@
631 @@@
632 %
633 The optional C identifier "cid" defines the external name by which the
634 exported Haskell variable is accessible in C.  If it is omitted, the external
635 name defaults to the name of the exported Haskell variable.
636
637 \paragraph{Constraints on Foreign Function Types}
638
639 In the case of import declaration, there are, depending on the kind of import
640 declaration, constraints regarding the admissible Haskell type that the
641 variable defined in the import may have.  These constraints are specified in
642 the following.
643 %
644 \begin{description}
645 \item[Static Functions.]  A static function can be of any foreign type; in
646   particular, the result type may or may not be in the IO monad.  If a
647   function that is not pure is not imported in the IO monad, the system
648   behaviour is undefined.  Generally, no check for consistency with the C type
649   of the imported label is performed.
650
651   As an example, consider
652   %
653 \bprog
654 @
655 foreign import ccall "static stdlib.h"
656    system :: Ptr CChar -> IO CInt
657 @
658 \eprog
659   %
660   This declaration imports the @system()@ function whose prototype is
661   available from @stdlib.h@.
662
663 \item[Static addresses.]  The type of an imported address is constrained to be
664   of the form @Ptr @\textit{a} or @FunPtr @\textit{a}, where
665   \textit{a} can be any type.
666
667   As an example, consider
668   %
669 \bprog
670 @
671 foreign import ccall "errno.h &errno" errno :: Ptr CInt
672 @
673 \eprog
674   %
675   It imports the address of the variable @errno@, which is of the C type
676   @int@.
677
678 \item[Dynamic import.]  The type of a "dynamic" stub has to be of the
679   form @(FunPtr @\textit{ft}@) -> @\textit{ft}, where \textit{ft} may
680   be any foreign type.
681
682   As an example, consider
683   %
684 \bprog
685 @
686 foreign import ccall "dynamic" 
687   mkFun :: FunPtr (CInt -> IO ()) -> (CInt -> IO ())
688 @
689 \eprog
690   %
691   The stub factory @mkFun@ converts any pointer to a C function that gets
692   an integer value as its only argument and does not have a return value into
693   a corresponding Haskell function.
694
695 \item[Dynamic wrapper.]  The type of a "wrapper" stub has to be of the
696   form \textit{ft}@ -> IO (FunPtr @\textit{ft}), where
697   \textit{ft} may be any foreign type.
698
699   As an example, consider
700   %
701 \bprog
702 @
703 foreign import ccall "wrapper" 
704   mkCallback :: IO () -> IO (FunPtr (IO ()))
705 @
706 \eprog
707   %
708   The stub factory @mkCallback@ turns any Haskell computation of type
709   @IO ()@ into a C function pointer that can be passed to C routines,
710   which can call back into the Haskell context by invoking the referenced
711   function.
712
713 \end{description}
714
715 \paragraph{Specification of Header Files}
716
717 A C header specified in an import declaration is always included by
718 @#include "@"chname"@"@.  There is no explicit support for
719 @#include <@"chname"@>@ style inclusion.  The ISO C99~\cite{C99}
720 standard guarantees that any search path that would be used for a
721 @#include <@"chname"@>@ is also used for @#include "@"chname"@"@ and it is guaranteed that these paths are searched after
722 all paths that are unique to @#include "@"chname"@"@.  Furthermore,
723 we require that "chname" ends on @.h@ to make parsing of the
724 specification of external entities unambiguous.
725   
726 The specification of include files has been kept to a minimum on purpose.
727 Libraries often require a multitude of include directives, some of which may
728 be system-dependent.  Any design that attempts to cover all possible
729 configurations would introduce significant complexity.  Moreover, in the
730 current design, a custom include file can be specified that uses the standard
731 C preprocessor features to include all relevant headers.
732
733 Header files have no impact on the semantics of a foreign call, and whether an
734 implementation uses the header file or not is implementation-defined.
735 However, as some implementations may require a header file that supplies a
736 correct prototype for external functions in order to generate correct code,
737 portable FFI code must include suitable header files.
738
739 \paragraph{C Argument Promotion}
740
741 The argument passing conventions of C are dependant on whether a function
742 prototype for the called functions is in scope at a call site.  In particular,
743 if no function prototype is in scope, \emph{default argument promotion} is
744 applied to integral and floating types.  In general, it cannot be expected
745 from a Haskell system that it is aware of whether a given C function was
746 compiled with or without a function prototype being in scope.  For the sake of
747 portability, we thus require that a Haskell system generally implements calls
748 to C functions as well as C stubs for Haskell functions as if a function
749 prototype for the called function is in scope.
750
751 This convention implies that the onus for ensuring the match between C and
752 Haskell code is placed on the FFI user.  In particular, when a C function that
753 was compiled without a prototype is called from Haskell, the Haskell signature
754 at the corresponding @foreign import@ declaration must use the types
755 \emph{after} argument promotion.  For example, consider the following C
756 function definition, which lacks a prototype:
757 %
758 \bprog
759 @
760 void foo (a)
761 float a;
762 {
763   ...
764 }
765 @
766 \eprog
767 %
768 The lack of a prototype implies that a C compiler will apply default argument
769 promotion to the parameter @a@, and thus, @foo@ will expect to
770 receive a value of type @double@, \emph{not} @float@.  Hence, the
771 correct @foreign import@ declaration is
772 %
773 \bprog
774 @
775 foreign import ccall foo :: Double -> IO ()
776 @
777 \eprog
778
779 In contrast, a C function compiled with the prototype
780 %
781 \bprog
782 @
783 void foo (float a);
784 @
785 \eprog
786 %
787 requires
788 %
789 \bprog
790 @
791 foreign import ccall foo :: Float -> IO ()
792 @
793 \eprog
794
795 A similar situation arises in the case of @foreign export@ declarations
796 that use types that would be altered under the C default argument promotion
797 rules.  When calling such Haskell functions from C, a function prototype
798 matching the signature provided in the @foreign export@ declaration must
799 be in scope; otherwise, the C compiler will erroneously apply the promotion
800 rules to all function arguments.
801
802 Note that for a C function defined to a accept a variable number of arguments,
803 all arguments beyond the explicitly typed arguments suffer argument promotion.
804 However, because C permits the calling convention to be different for such
805 functions; a Haskell system will, in general, not be able to make use of
806 variable argument functions.  Hence, their use is deprecated in portable code.
807
808
809 \subsubsection{Win32 API Calls}
810
811 The specification of external entities under the @stdcall@ calling
812 convention is identical to that for standard C calls.  The two calling
813 conventions only differ in the generated code.
814
815
816 % \begin{FUTURE} % ===== Material for future extension =======================
817
818 % \subsubsection{C{+}{+} Calls}
819
820 % The syntax for the specification of external entities under the
821 % @cplusplus@ calling convention is
822
823 % \subsubsection{JVM Calls}
824
825 % The syntax for the specification of external entities under the @jvm@
826 % calling convention is 
827 % %
828
829 %   \grule{impent}{%
830 %     ""jtype" "jqid"("jtypes")"}
831 %   \gor[constructor call]{%
832 %     "new "jqid"("jtypes")"}
833 %   \grule[$n\geq0$]{jtypes}{%
834 %     \gnterm[1]{jtype},\gellipse,\gnterm[n]{jtype}}
835
836 % %
837 % where "jqid" is a qualified Java identifier and "jtype" a Java
838 % types as defined in~\cite{gosling-etal:Java}.
839
840 % \begin{verbatim}
841 % FIXME: 
842 % - force the inclusion of the return type in case of "new"?
843 % \end{verbatim}
844
845 % \subsubsection{.NET Calls}
846
847 % The syntax for the specification of external entities under the @dotnet@
848 % calling convention is
849
850 % \end{FUTURE}% =============================================================
851
852
853 \subsection{Marshalling}
854 \label{sec:marshalling}
855
856 In addition to the language extension discussed in previous sections, the FFI
857 includes a set of standard libraries, which ease portable use of foreign
858 functions as well as marshalling of compound structures.  Generally, the
859 marshalling of Haskell structures into a foreign representation and vice versa
860 can be implemented in either Haskell or the foreign language.  At least where
861 the foreign language is at a significantly lower level, e.g.\ C, there are
862 good reasons for doing the marshalling in Haskell:
863 %
864 \begin{itemize}
865 \item Haskell's lazy evaluation strategy would require any foreign code that
866   attempts to access Haskell structures to force the evaluation of these
867   structures before accessing them. This would lead to complicated code in the
868   foreign language, but does not need any extra consideration when coding the
869   marshalling in Haskell.
870 \item Despite the fact that marshalling code in Haskell tends to look like C
871   in Haskell syntax, the strong type system still catches many errors that
872   would otherwise lead to difficult-to-debug runtime faults.
873 \item Direct access to Haskell heap structures from a language like
874   C---especially, when marshalling from C to Haskell, i.e., when Haskell
875   structures are created---carries the risk of corrupting the heap, which
876   usually leads to faults that are very hard to debug.
877 \end{itemize}
878 %
879 Consequently, the Haskell FFI emphasises Haskell-side marshalling.
880
881 The interface to the marshalling libraries is provided by the module
882 @Foreign@ (Chapter~\ref{sec:Foreign}) plus a language-dependent module per supported language.  In
883 particular, the standard requires the availability of the module
884 @Foreign.C@ (Chapter~\ref{sec:CForeign}), which simplifies portable interfacing with external C code.
885 Language-dependent modules, such as @Foreign.C@, generally provide Haskell
886 types representing the basic types of the foreign language using a
887 representation that is compatible with the foreign types as implemented by the
888 default implementation of the foreign language on the present architecture.
889 This is especially important for languages where the standard leaves some
890 aspects of the implementation of basic types open.  For example, in C, the
891 size of the various integral types is not fixed.  Thus, to represent C
892 interfaces faithfully in Haskell, for each integral type in C, we need to have
893 an integral type in Haskell that is guaranteed to have the same size as the
894 corresponding C type.