doc-src/Codegen/Thy/Further.thy
changeset 38437 ffb1c5bf0425
parent 38405 7935b334893e
child 38505 2f8699695cf6
--- a/doc-src/Codegen/Thy/Further.thy	Fri Aug 13 16:40:47 2010 +0200
+++ b/doc-src/Codegen/Thy/Further.thy	Mon Aug 16 10:32:14 2010 +0200
@@ -4,12 +4,34 @@
 
 section {* Further issues \label{sec:further} *}
 
-subsection {* Further reading *}
+subsection {* Modules namespace *}
 
 text {*
-  To dive deeper into the issue of code generation, you should visit
-  the Isabelle/Isar Reference Manual \cite{isabelle-isar-ref}, which
-  contains exhaustive syntax diagrams.
+  When invoking the @{command export_code} command it is possible to leave
+  out the @{keyword "module_name"} part;  then code is distributed over
+  different modules, where the module name space roughly is induced
+  by the Isabelle theory name space.
+
+  Then sometimes the awkward situation occurs that dependencies between
+  definitions introduce cyclic dependencies between modules, which in the
+  @{text Haskell} world leaves you to the mercy of the @{text Haskell} implementation
+  you are using,  while for @{text SML}/@{text OCaml} code generation is not possible.
+
+  A solution is to declare module names explicitly.
+  Let use assume the three cyclically dependent
+  modules are named \emph{A}, \emph{B} and \emph{C}.
+  Then, by stating
+*}
+
+code_modulename %quote SML
+  A ABC
+  B ABC
+  C ABC
+
+text {*\noindent
+  we explicitly map all those modules on \emph{ABC},
+  resulting in an ad-hoc merge of this three modules
+  at serialisation time.
 *}
 
 subsection {* Locales and interpretation *}
@@ -93,35 +115,16 @@
 text %quote {*@{code_stmts funpows (consts) Nat.funpow funpows (Haskell)}*}
 
 
-subsection {* Modules *}
+subsection {* Imperative data structures *}
 
 text {*
-  When invoking the @{command export_code} command it is possible to leave
-  out the @{keyword "module_name"} part;  then code is distributed over
-  different modules, where the module name space roughly is induced
-  by the @{text Isabelle} theory name space.
-
-  Then sometimes the awkward situation occurs that dependencies between
-  definitions introduce cyclic dependencies between modules, which in the
-  @{text Haskell} world leaves you to the mercy of the @{text Haskell} implementation
-  you are using,  while for @{text SML}/@{text OCaml} code generation is not possible.
-
-  A solution is to declare module names explicitly.
-  Let use assume the three cyclically dependent
-  modules are named \emph{A}, \emph{B} and \emph{C}.
-  Then, by stating
+  If you consider imperative data structures as inevitable for a
+  specific application, you should consider \emph{Imperative
+  Functional Programming with Isabelle/HOL}
+  \cite{bulwahn-et-al:2008:imperative}; the framework described there
+  is available in session @{theory Imperative_HOL}.
 *}
 
-code_modulename %quote SML
-  A ABC
-  B ABC
-  C ABC
-
-text {*\noindent
-  we explicitly map all those modules on \emph{ABC},
-  resulting in an ad-hoc merge of this three modules
-  at serialisation time.
-*}
 
 subsection {* Evaluation oracle *}
 
@@ -150,7 +153,14 @@
   why you should not use adaptation (see \secref{sec:adaptation}) frivolously.
 *}
 
-subsection {* Code antiquotation *}
+
+subsection {* Building evaluators *}
+
+text {*
+  FIXME
+*}
+
+subsubsection {* Code antiquotation *}
 
 text {*
   In scenarios involving techniques like reflection it is quite common
@@ -181,16 +191,6 @@
   a good reference.
 *}
 
-subsection {* Imperative data structures *}
-
-text {*
-  If you consider imperative data structures as inevitable for a specific
-  application, you should consider
-  \emph{Imperative Functional Programming with Isabelle/HOL}
-  \cite{bulwahn-et-al:2008:imperative};
-  the framework described there is available in theory @{theory Imperative_HOL}.
-*}
-
 
 subsection {* ML system interfaces \label{sec:ml} *}
 
@@ -321,10 +321,4 @@
   \end{description}
 *}
 
-text {*
-  \bigskip
-
-  \emph{Happy proving, happy hacking!}
-*}
-
 end