exception Foreign : string
structure Memory
eqtype volatileRef
val volatileRef : SysWord.word -> volatileRef
val setVolatileRef : volatileRef * SysWord.word -> unit
val getVolatileRef : volatileRef -> SysWord.word
eqtype voidStar
val voidStar2Sysword : voidStar -> SysWord.word
val sysWord2VoidStar : SysWord.word -> voidStar
val null : voidStar
val ++ : voidStar * word -> voidStar
val -- : voidStar * word -> voidStar
val memoise : ('a -> voidStar) -> 'a -> unit -> voidStar
exception Memory
val malloc : word -> voidStar
val free : voidStar -> unit
val alloca : word * (voidStar -> 'a) -> 'a
val get8 : voidStar * Word.word -> Word8.word
val get16 : voidStar * Word.word -> Word.word
val get32 : voidStar * Word.word -> Word32.word
val get64 : voidStar * Word.word -> SysWord.word
val set8 : voidStar * Word.word * Word8.word -> unit
val set16 : voidStar * Word.word * Word.word -> unit
val set32 : voidStar * Word.word * Word32.word -> unit
val set64 : voidStar * Word.word * SysWord.word -> unit
val getFloat : voidStar * Word.word -> real
val getDouble : voidStar * Word.word -> real
val setFloat : voidStar * Word.word * real -> unit
val setDouble : voidStar * Word.word * real -> unit
val getAddress : voidStar * Word.word -> voidStar
val setAddress : voidStar * Word.word * voidStar -> unit
structure System
type voidStar = Memory.voidStar
type externalSymbol
val loadLibrary : string -> voidStar
and loadExecutable : unit -> voidStar
and freeLibrary : voidStar -> unit
and getSymbol : voidStar * string -> voidStar
and externalFunctionSymbol : string -> externalSymbol
and externalDataSymbol : string -> externalSymbol
and addressOfExternal : externalSymbol -> voidStar
structure Error
type syserror = LibrarySupport.syserror
val getLastError : unit -> SysWord.word
val setLastError : SysWord.word -> unit
val fromWord : SysWord.word -> syserror
and toWord : syserror -> SysWord.word
type library
type symbol
val loadLibrary : string -> library
Provide the path to a library. The library will only be opened when a symbol is actually used to call a function. If the library cannot be found the Foreign exception will be raised.
val loadLibraryIndirect : (unit -> string) -> library
Load a library. The path to the library is provided by a function that is called when the library is actually accessed. Normally this will be the first time that a foreign function is used from the library in the session.
val loadExecutable : unit -> library
val getSymbol : library -> string -> symbol
Provide a symbol to be looked up in a library. This will only actually look up the symbol when the symbol is used, typically in a call to a foreign function.
val symbolAsAddress : symbol -> Memory.voidStar
Get the address of a symbol. If the symbol is in a library the library will actually be loaded and the symbol looked up.
val externalFunctionSymbol : string -> symbol
and externalDataSymbol : string -> symbol
Create an external reference and return the value as a symbol. This is only useful
when the code is to be exported as an object file using
structure LowLevel
datatype cTypeForm =
CTypeFloatingPt |
CTypePointer |
CTypeSignedInt |
CTypeUnsignedInt |
CTypeStruct of cType list |
CTypeVoid
withtype cType = {typeForm:cTypeForm, align:word, size:word}
eqtype abi
val abiList : (string * abi) list
val abiDefault : abi
val cTypeVoid : cType
and cTypePointer : cType
and cTypeInt8 : cType
and cTypeChar : cType
and cTypeUint8 : cType
and cTypeUchar : cType
and cTypeInt16 : cType
and cTypeUint16 : cType
and cTypeInt32 : cType
and cTypeUint32 : cType
and cTypeInt64 : cType
and cTypeUint64 : cType
and cTypeInt : cType
and cTypeUint : cType
and cTypeLong : cType
and cTypeUlong : cType
and cTypeFloat : cType
and cTypeDouble : cType
val cStruct : cType list -> cType
val callwithAbi :
abi ->
cType list ->
cType -> symbol -> Memory.voidStar * Memory.voidStar -> unit
val call :
cType list ->
cType -> symbol -> Memory.voidStar * Memory.voidStar -> unit
val cFunctionWithAbi :
abi ->
cType list ->
cType ->
(Memory.voidStar * Memory.voidStar -> unit) ->
Memory.voidStar
val cFunction :
cType list ->
cType ->
(Memory.voidStar * Memory.voidStar -> unit) -> Memory.voidStar
val symbolFromAddress : (unit -> Memory.voidStar) -> symbol
Create a symbol value from a function that returns an address. The function will
be called each time the address is required. Often this will use
type 'aconversion
val makeConversion :
{load:Memory.voidStar -> 'a,
store:Memory.voidStar * 'a -> unit -> unit, ctype:LowLevel.cType
} -> 'a conversion
val breakConversion :
'a conversion ->
{load:Memory.voidStar -> 'a,
store:Memory.voidStar * 'a -> unit -> unit,
ctype:LowLevel.cType}
val cVoid : unit conversion
val cPointer : Memory.voidStar conversion
val cInt8 : int conversion
val cUint8 : int conversion
val cChar : char conversion
val cUchar : Word8.word conversion
val cInt16 : int conversion
val cUint16 : int conversion
val cInt32 : int conversion
val cUint32 : int conversion
val cInt64 : int conversion
val cUint64 : int conversion
val cInt32Large : LargeInt.int conversion
val cUint32Large : LargeInt.int conversion
val cInt64Large : LargeInt.int conversion
val cUint64Large : LargeInt.int conversion
val cShort : int conversion
val cUshort : int conversion
val cInt : int conversion
val cUint : int conversion
val cLong : int conversion
val cUlong : int conversion
val cIntLarge : LargeInt.int conversion
val cUintLarge : LargeInt.int conversion
val cLongLarge : LargeInt.int conversion
val cUlongLarge : LargeInt.int conversion
val cString : string conversion
val cByteArray : Word8Vector.vector conversion
val cFloat : real conversion
val cDouble : real conversion
val cOptionPtr : 'a conversion -> 'a option conversion
type 'aclosure
val cFunction : ('a -> 'b) closure conversion
val buildCallback0withAbi :
LowLevel.abi * unit * 'a conversion ->
(unit -> 'a) -> (unit -> 'a) closure
Build a callback (closure). The first application creates a piece of code that handles type conversion; the second captures an ML function. The second application is relatively light-weight but still involves generating a small piece of code. Callbacks are garbage-collected if they are not referenced from ML. If necessary call touchClosure at the end of any possible use to ensure that it cannot be garbage-collected earlier.
val buildCallback0 :
unit * 'a conversion -> (unit -> 'a) -> (unit -> 'a) closure
val buildCallback1withAbi :
LowLevel.abi * 'a conversion * 'b conversion ->
('a -> 'b) -> ('a -> 'b) closure
val buildCallback1 :
'a conversion * 'b conversion -> ('a -> 'b) -> ('a -> 'b) closure
val buildCallback2withAbi :
LowLevel.abi * ('a conversion * 'b conversion) * 'c conversion ->
('a * 'b -> 'c) -> ('a * 'b -> 'c) closure
val buildCallback2 :
('a conversion * 'b conversion) * 'c conversion ->
('a * 'b -> 'c) -> ('a * 'b -> 'c) closure
val buildCallback3withAbi :
LowLevel.abi * ('a conversion * 'b conversion * 'c conversion) *
'd conversion ->
('a * 'b * 'c -> 'd) -> ('a * 'b * 'c -> 'd) closure
val buildCallback3 :
('a conversion * 'b conversion * 'c conversion) * 'd conversion ->
('a * 'b * 'c -> 'd) -> ('a * 'b * 'c -> 'd) closure
val buildCallback4withAbi :
LowLevel.abi *
('a conversion * 'b conversion * 'c conversion * 'd conversion) *
'e conversion ->
('a * 'b * 'c * 'd -> 'e) -> ('a * 'b * 'c * 'd -> 'e) closure
val buildCallback4 :
('a conversion * 'b conversion * 'c conversion * 'd conversion) *
'e conversion ->
('a * 'b * 'c * 'd -> 'e) -> ('a * 'b * 'c * 'd -> 'e) closure
val buildCallback5withAbi :
LowLevel.abi *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion) * 'f conversion ->
('a * 'b * 'c * 'd * 'e -> 'f) ->
('a * 'b * 'c * 'd * 'e -> 'f) closure
val buildCallback5 :
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion) * 'f conversion ->
('a * 'b * 'c * 'd * 'e -> 'f) ->
('a * 'b * 'c * 'd * 'e -> 'f) closure
val buildCallback6withAbi :
LowLevel.abi *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion) * 'g conversion ->
('a * 'b * 'c * 'd * 'e * 'f -> 'g) ->
('a * 'b * 'c * 'd * 'e * 'f -> 'g) closure
val buildCallback6 :
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion) * 'g conversion ->
('a * 'b * 'c * 'd * 'e * 'f -> 'g) ->
('a * 'b * 'c * 'd * 'e * 'f -> 'g) closure
val touchClosure : 'a closure -> unit
This ensures that a value can be referenced at the point it is called. It has no other effect.
val buildClosure0 :
(unit -> 'a) * unit * 'a conversion -> (unit -> 'a) closure
Closure functions provided for backwards compatibility. These are not garbage-collected and once created will persist until the end of the session.
val buildClosure1 :
('a -> 'b) * 'a conversion * 'b conversion -> ('a -> 'b) closure
val buildClosure2 :
('a * 'b -> 'c) * ('a conversion * 'b conversion) * 'c conversion
-> ('a * 'b -> 'c) closure
val buildClosure3 :
('a * 'b * 'c -> 'd) *
('a conversion * 'b conversion * 'c conversion) * 'd conversion ->
('a * 'b * 'c -> 'd) closure
val buildClosure4 :
('a * 'b * 'c * 'd -> 'e) *
('a conversion * 'b conversion * 'c conversion * 'd conversion) *
'e conversion -> ('a * 'b * 'c * 'd -> 'e) closure
val buildClosure5 :
('a * 'b * 'c * 'd * 'e -> 'f) *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion) * 'f conversion ->
('a * 'b * 'c * 'd * 'e -> 'f) closure
val buildClosure6 :
('a * 'b * 'c * 'd * 'e * 'f -> 'g) *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion) * 'g conversion ->
('a * 'b * 'c * 'd * 'e * 'f -> 'g) closure
val permanent : 'a conversion -> 'a conversion
val cStar : 'a conversion -> 'a ref conversion
val cConstStar : 'a conversion -> 'a conversion
val cVectorFixedSize : int * 'a conversion -> 'a vector conversion
and cVectorPointer : 'a conversion -> 'a vector conversion
and cArrayPointer : 'a conversion -> 'a array conversion
val cStruct2 : 'a conversion * 'b conversion -> ('a * 'b) conversion
val cStruct3 :
'a conversion * 'b conversion * 'c conversion ->
('a * 'b * 'c) conversion
val cStruct4 :
'a conversion * 'b conversion * 'c conversion * 'd conversion ->
('a * 'b * 'c * 'd) conversion
val cStruct5 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion -> ('a * 'b * 'c * 'd * 'e) conversion
val cStruct6 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion ->
('a * 'b * 'c * 'd * 'e * 'f) conversion
val cStruct7 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g) conversion
val cStruct8 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h) conversion
val cStruct9 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i) conversion
val cStruct10 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j) conversion
val cStruct11 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k)
conversion
val cStruct12 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l)
conversion
val cStruct13 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion ->
('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm)
conversion
val cStruct14 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n) conversion
val cStruct15 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion * 'o conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n * 'o) conversion
val cStruct16 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion * 'o conversion * 'p conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n * 'o * 'p) conversion
val cStruct17 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion * 'o conversion * 'p conversion *
'q conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n * 'o * 'p * 'q) conversion
val cStruct18 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion * 'o conversion * 'p conversion *
'q conversion * 'r conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n * 'o * 'p * 'q * 'r) conversion
val cStruct19 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion * 'o conversion * 'p conversion *
'q conversion * 'r conversion * 's conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n * 'o * 'p * 'q * 'r * 's) conversion
val cStruct20 :
'a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion * 'o conversion * 'p conversion *
'q conversion * 'r conversion * 's conversion * 't conversion ->
(
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n * 'o * 'p * 'q * 'r * 's * 't) conversion
val buildCall0withAbi :
LowLevel.abi * symbol * unit * 'a conversion -> unit -> 'a
val buildCall0 : symbol * unit * 'a conversion -> unit -> 'a
val buildCall1withAbi :
LowLevel.abi * symbol * 'a conversion * 'b conversion -> 'a -> 'b
val buildCall1 : symbol * 'a conversion * 'b conversion -> 'a -> 'b
val buildCall2withAbi :
LowLevel.abi * symbol * ('a conversion * 'b conversion) *
'c conversion -> 'a * 'b -> 'c
val buildCall2 :
symbol * ('a conversion * 'b conversion) * 'c conversion ->
'a * 'b -> 'c
val buildCall3withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion) * 'd conversion ->
'a * 'b * 'c -> 'd
val buildCall3 :
symbol * ('a conversion * 'b conversion * 'c conversion) *
'd conversion -> 'a * 'b * 'c -> 'd
val buildCall4withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion) *
'e conversion -> 'a * 'b * 'c * 'd -> 'e
val buildCall4 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion) *
'e conversion -> 'a * 'b * 'c * 'd -> 'e
val buildCall5withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion) * 'f conversion -> 'a * 'b * 'c * 'd * 'e -> 'f
val buildCall5 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion) * 'f conversion -> 'a * 'b * 'c * 'd * 'e -> 'f
val buildCall6withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion) * 'g conversion ->
'a * 'b * 'c * 'd * 'e * 'f -> 'g
val buildCall6 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion) * 'g conversion ->
'a * 'b * 'c * 'd * 'e * 'f -> 'g
val buildCall7withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion) * 'h conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g -> 'h
val buildCall7 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion) * 'h conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g -> 'h
val buildCall8withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion) *
'i conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h -> 'i
val buildCall8 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion) *
'i conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h -> 'i
val buildCall9withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion) * 'j conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i -> 'j
val buildCall9 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion) * 'j conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i -> 'j
val buildCall10withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion) * 'k conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j -> 'k
val buildCall10 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion) * 'k conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j -> 'k
val buildCall11withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion) * 'l conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k -> 'l
val buildCall11 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion) * 'l conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k -> 'l
val buildCall12withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion) *
'm conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l -> 'm
val buildCall12 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion) *
'm conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l -> 'm
val buildCall13withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion) * 'n conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm
-> 'n
val buildCall13 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion) * 'n conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm
-> 'n
val buildCall14withAbi :
LowLevel.abi * symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion) * 'o conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n -> 'o
val buildCall14 :
symbol *
('a conversion * 'b conversion * 'c conversion * 'd conversion *
'e conversion * 'f conversion * 'g conversion * 'h conversion *
'i conversion * 'j conversion * 'k conversion * 'l conversion *
'm conversion * 'n conversion) * 'o conversion ->
'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm *
'n -> 'o