diff options
| -rw-r--r-- | dhall/src/normalize.rs | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/dhall/src/normalize.rs b/dhall/src/normalize.rs index 71c8d31..f6ec09c 100644 --- a/dhall/src/normalize.rs +++ b/dhall/src/normalize.rs @@ -262,10 +262,10 @@ impl NormalizationContext {  /// A semantic value. This is partially redundant with `dhall_core::Expr`, on purpose. `Expr` should  /// be limited to syntactic expressions: either written by the user or meant to be printed. -/// The rule is the following: we must _not_ construct values of type `Expr` while normalizing or -/// typechecking, but only construct `WHNF`s. +/// The rule is the following: we must _not_ construct values of type `Expr` while normalizing, +/// but only construct `WHNF`s.  /// -/// WHNFs usually store subexpressions unnormalized, to enable lazy normalization. They approximate +/// WHNFs store subexpressions unnormalized, to enable lazy normalization. They approximate  /// what's called Weak Head Normal-Form (WHNF). This means that the expression is normalized as  /// little as possible, but just enough to know the first constructor of the normal form. This is  /// identical to full normalization for simple types like integers, but for e.g. a record literal @@ -471,8 +471,9 @@ impl WHNF {              (WHNF::ListConsClosure(_, Some(x)), WHNF::EmptyListLit(_)) => {                  WHNF::NEListLit(vec![x])              } -            (WHNF::ListConsClosure(_, Some(x)), WHNF::NEListLit(xs)) => { -                WHNF::NEListLit(std::iter::once(x).chain(xs).collect()) +            (WHNF::ListConsClosure(_, Some(x)), WHNF::NEListLit(mut xs)) => { +                xs.insert(0, x); +                WHNF::NEListLit(xs)              }              (WHNF::NaturalSuccClosure, WHNF::NaturalLit(n)) => {                  WHNF::NaturalLit(n + 1)  | 
