about summary refs log tree commit diff
path: root/src/eval.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.hh')
-rw-r--r--src/eval.hh79
1 files changed, 15 insertions, 64 deletions
diff --git a/src/eval.hh b/src/eval.hh
index 807f98f853..f90d5ba02b 100644
--- a/src/eval.hh
+++ b/src/eval.hh
@@ -10,14 +10,12 @@ extern "C" {
 using namespace std;
 
 
-/* \section{Abstract syntax of Nix expressions}
+/* \section{Abstract syntax of Nix file system state expressions}
 
-   An expression describes a (partial) state of the file system in a
-   referentially transparent way.  The operational effect of
-   evaluating an expression is that the state described by the
-   expression is realised.
+   A Nix file system state expression, or FState, describes a
+   (partial) state of the file system.
 
-     File : Path * Content * [Expr] -> Expr
+     File : Path * Content * [FState] -> FState
 
    File(path, content, refs) specifies a file object (its full path
    and contents), along with all file objects referenced by it (that
@@ -25,7 +23,7 @@ using namespace std;
    self-referential.  This prevents us from having to deal with
    cycles.
 
-     Derive : String * Path * [Expr] * [Expr] * [Expr] -> Expr
+     Derive : String * Path * [FState] * [Path] * [(String, String)] -> [FState]
 
    Derive(platform, builder, ins, outs, env) specifies the creation of
    new file objects (in paths declared by `outs') by the execution of
@@ -33,14 +31,6 @@ using namespace std;
    place in a file system state given by `ins'.  `env' specifies a
    mapping of strings to strings.
 
-     Str : String -> Expr
-
-   A string constant.
-
-     Tup : Expr * Expr -> Expr
-
-   Tuples of expressions.
-
      [ !!! NOT IMPLEMENTED 
        Regular : String -> Content
        Directory : [(String, Content)] -> Content
@@ -49,7 +39,11 @@ using namespace std;
      CHash : Hash -> Content
 
    File content, given either in situ, or through an external reference
-   to the file system or url-space decorated with a hash to preserve purity.
+   to the file system or url-space decorated with a hash to preserve
+   purity.
+
+   A FState expression is in {\em $f$-normal form} if all Derive nodes
+   have been reduced to File nodes.
 
    DISCUSSION: the idea is that a Regular/Directory is interchangeable
    with its CHash.  This would appear to break referential
@@ -60,63 +54,20 @@ using namespace std;
    CHash, we should also export the file object referenced by that
    CHash.
 
-
-   \section{Reduction rules}
-
-   ...
-
-
-   \section{Normals forms}
-
-   An expression is in {\em weak head normal form} if it is a lambda,
-   a string or boolean value, or a File or Derive value.
-
-   An expression is in {\em $d$-normal form} if it matches the
-   signature FExpr:
-
-     File : String * Content * [DExpr] -> DExpr
-     Derive : String * Path * [Tup] * [Tup2] -> DExpr
-
-     Tup : Str * DExpr -> Tup
-     Tup : Str * Str -> Tup
-
-     Tup : Str * Str -> Tup2
-
-     Str : String -> Str
-
-   These are Nix expressions in which the file system result of Derive
-   expressions has not yet been computed.  This is useful for, e.g.,
-   querying dependencies.
-
-   An expression is in {\em $f$-normal form} if it matches the
-   signature FExpr:
-
-     File : String * Content * [FExpr] -> FExpr
-
-   These are completely evaluated Nix expressions.
-
 */
 
-typedef ATerm Expr;
+typedef ATerm FState;
 typedef ATerm Content;
 
 
-/* Expression normalisation. */
-Expr whNormalise(Expr e);
-Expr dNormalise(Expr e);
-Expr fNormalise(Expr e);
-
 /* Realise a $f$-normalised expression in the file system. */
-void realise(Expr e);
+void realiseFState(FState fs);
 
 /* Return a canonical textual representation of an expression. */
-string printExpr(Expr e);
-
-/* Perform variable substitution. */
-Expr substExpr(string x, Expr rep, Expr e);
+string printTerm(ATerm t);
 
-/* Hash an expression. */
-Hash hashExpr(Expr e);
+/* Hash an aterm. */
+Hash hashTerm(ATerm t);
 
 
 #endif /* !__EVAL_H */