Contents

1 Introduction
 1.1 Embedding Into Haskell 98
 1.2 Language-Specific FFI Support
 1.3 Contexts
 1.4 Cross Language Type Consistency
2 Lexical Structure
3 Foreign Declarations
 3.1 Calling Conventions
 3.2 Foreign Types
 3.3 Import Declarations
 3.4 Export Declarations
4 Specification of External Entities
 4.1 Standard C Calls
  4.1.1 Import Declarations
  4.1.2 Export Declarations
  4.1.3 Constraints on Foreign Function Types
  4.1.4 Specification of Header Files
  4.1.5 C Argument Promotion
 4.2 Win32 API Calls
5 Marshalling
 5.1 Foreign
 5.2 Bits
 5.3 Int and Word
 5.4 Ptr
  5.4.1 Data Pointers
  5.4.2 Function Pointers
 5.5 ForeignPtr
 5.6 StablePtr
 5.7 Storable
 5.8 MarshalAlloc
 5.9 MarshalArray
 5.10 MarshalError
  5.10.1 I/O Errors
  5.10.2 Result Value Checks
 5.11 MarshalUtils
6 C-Specific Marshalling
 6.1 CForeign
 6.2 CTypes
 6.3 CString
 6.4 CError