diff options
Diffstat (limited to 'src/eval.hh')
-rw-r--r-- | src/eval.hh | 79 |
1 files changed, 15 insertions, 64 deletions
diff --git a/src/eval.hh b/src/eval.hh index 807f98f85..f90d5ba02 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 */ |