<< Prev | - Up - |
The module Functor
contains procedures operating on functors.
is
{Functor.is
+X
?B
}
tests whether X
is a functor.
new
{Functor.new
<import spec><export spec>
+P
?Functor
}
returns a new functor with imports as described by the <import spec>, exports as described by the <export spec>, and body as performed by P
.
The <import spec> is a record mapping the name of each imported module to a record giving information about it:
<import spec> ::= 'import'(
<module name>:
<import info>...
<module name>
:
<import info>)
<module name> ::= <atom>
The optional 'from'
field gives the value of this import's at
clause, if given:
<import info> ::= info(type:
<type>[
'from':
<atom>])
The type
field is the expected type of the module. This can be any of the atoms returned by Value.type
, plus some more implementation-specific ones, or a record with label record
:
<type> ::= int
|atom
| ...% see above | record(
<feature>:
<type>...
<feature>
:
<type>)
| nil
% no information known
The <export spec> is a record mapping each feature of the module resulting from applications of this functor to the type of the corresponding value:
<export spec> ::= 'export'(
<feature>:
<type>...
<feature>
:
<type>)
The body is a binary procedure {P
<import>
<export>}
where:
<import> ::= 'IMPORT'(
<module name>:
<value>...
<module name>
:
<value>)
<export> ::= <value>
<< Prev | - Up - |