diff --git a/doc/gf-modules.html b/doc/gf-modules.html index 51aff0685..5d3103d40 100644 --- a/doc/gf-modules.html +++ b/doc/gf-modules.html @@ -407,21 +407,21 @@ from firm principles. The typical use is through open in a concrete module, which means that resource modules are not imported on their own. -However, when developing and testing phase of grammars, it +However, in the developing and testing phase of grammars, it can be useful to evaluate opers with different -arguments. To prevent them from being inlined away, the +arguments. To prevent them from being thrown away after inlining, the -retain option can be used:
> i -retain Util.gfThe command compute_concrete (cc) -can now be used for evaluating expressions that may concain +can now be used for evaluating expressions that may contain operations defined in Util:
> cc ss (paren "foo")
{s = "(" ++ "foo" ++ ")"}
-To find out, what opers are available for a given type,
+To find out what opers are available for a given type,
the command show_operations (so) can be used:
> so SS @@ -447,7 +447,7 @@ languages.-In addition to its special modularity, GF provides inheritance, +In addition to this special kind of modularity, GF provides inheritance, which is familiar from other programming languages (in particular, object-oriented ones). Inheritance means that a module inherits all judgements from another module; we also say that it extends @@ -524,8 +524,7 @@ Instead, an indirection is created for each inherited name, as can be seen by looking into the generated gfc (and gfr) files. Thus for instance the names
- Mathematics.Prop Arithmetic.Prop Logic.Prop - Geometry.Prop + Mathematics.Prop Arithmetic.Prop Geometry.Prop Logic.Propall refer to the same category, declared in the module Logic. @@ -591,11 +590,11 @@ the same linearization type, the actual translation used in GF adds to every linearization type and linearization a lock field,- cat C ; ===> oper C : Type = T ** {lock_C : {}} ; + cat C ; ===> oper C : Type = T ** {lock_C : {}} ; lincat C = T ; - fun f : ... -> C ; ===> oper f : A = t ** {lock_C = <>}; - lin f = t ; + fun f : C_1 ... C_n -> C ; ===> oper f : A = \x_1,...,x_n -> + lin f = t ; t x_1 ... x_n ** {lock_C = <>};(Notice that the latter translation is type-correct because of record subtyping, which means that t can ignore the @@ -666,10 +665,10 @@ a concrete using the same syntax as when opening a resource. For an instance, the semantics is the same as when opening the definitions together with the type signatures - one can think of an interface -and an instance of it forming an ordinary +and an instance of it together forming an ordinary resource. Opening an interface, however, is different: functions that are only declared without -having a definition cannot be compiled (inlined), and nor +having a definition cannot be compiled (inlined); neither can functions whose definitions depend on undefined functions.@@ -689,7 +688,8 @@ uses the interface Markup to place markup in chosen places in its linearization rules, but the implementation of markup - whether in HTML or in LaTeX - is left unspecified. This is a powerful way of sharing -the code of a whole module. +the code of a whole module with just differences in +the definitions of some constants.
@@ -735,7 +735,7 @@ not be completions). But it cannot add new judgements. Interfaces, instances, and parametric modules are purely a front-end feature of GF: these module types do not exist in the gfc and gfr formats. The compiler has -nevertheless keep track of their dependencies and modification +nevertheless to keep track of their dependencies and modification times. Here is a summary of how they are compiled: