From ec1f31b5a1492d5e0ab260397291d4449483bbd9 Mon Sep 17 00:00:00 2001
From: Eduardo Julian
Date: Mon, 23 Aug 2021 02:30:53 -0400
Subject: The Python compiler can now be compiled by the new JVM compiler.

---
 stdlib/source/documentation/lux.lux                |  16 +-
 stdlib/source/documentation/lux/abstract.lux       |   4 +-
 stdlib/source/documentation/lux/abstract/fold.lux  |  24 -
 stdlib/source/documentation/lux/abstract/mix.lux   |  24 +
 stdlib/source/documentation/lux/abstract/monad.lux |   8 +-
 .../documentation/lux/control/concurrency/frp.lux  |  10 +-
 stdlib/source/documentation/lux/control/pipe.lux   |   4 +-
 .../documentation/lux/data/collection/array.lux    |   2 +-
 .../documentation/lux/data/collection/list.lux     |   8 +-
 .../documentation/lux/data/collection/row.lux      |   2 +-
 stdlib/source/documentation/lux/data/color.lux     |  25 +-
 .../source/documentation/lux/data/color/named.lux  |   8 +-
 stdlib/source/documentation/lux/data/product.lux   |   2 +-
 .../documentation/lux/data/text/encoding/utf8.lux  |   5 +-
 .../documentation/lux/data/text/unicode/block.lux  |   6 +-
 stdlib/source/documentation/lux/macro/template.lux |   2 +-
 stdlib/source/documentation/lux/math.lux           |  73 ++-
 stdlib/source/documentation/lux/math/infix.lux     |   2 +-
 stdlib/source/documentation/lux/math/logic.lux     |  14 +-
 stdlib/source/documentation/lux/math/modular.lux   |  53 ++
 stdlib/source/documentation/lux/math/modulus.lux   |  39 ++
 stdlib/source/documentation/lux/math/number.lux    |  52 ++
 .../documentation/lux/math/number/complex.lux      |  64 +++
 .../source/documentation/lux/math/number/frac.lux  | 127 +++++
 .../source/documentation/lux/math/number/i16.lux   |  25 +
 .../source/documentation/lux/math/number/i32.lux   |  25 +
 .../source/documentation/lux/math/number/i64.lux   | 123 ++++
 stdlib/source/documentation/lux/math/number/i8.lux |  25 +
 .../source/documentation/lux/math/number/int.lux   | 127 +++++
 .../source/documentation/lux/math/number/nat.lux   |  82 +++
 .../source/documentation/lux/math/number/ratio.lux |  45 ++
 .../source/documentation/lux/math/number/rev.lux   | 115 ++++
 stdlib/source/documentation/lux/math/random.lux    | 139 +++++
 stdlib/source/documentation/lux/meta.lux           | 196 +++++++
 .../source/documentation/lux/meta/annotation.lux   |  56 ++
 stdlib/source/documentation/lux/meta/location.lux  |  30 +
 stdlib/source/documentation/lux/static.lux         |  70 +++
 stdlib/source/documentation/lux/target.lux         |  32 ++
 stdlib/source/library/lux.lux                      | 628 ++++++++++-----------
 stdlib/source/library/lux/abstract/apply.lux       |  20 +-
 stdlib/source/library/lux/abstract/codec.lux       |  16 +-
 stdlib/source/library/lux/abstract/comonad.lux     |  28 +-
 stdlib/source/library/lux/abstract/fold.lux        |  16 -
 stdlib/source/library/lux/abstract/mix.lux         |  16 +
 stdlib/source/library/lux/abstract/monad.lux       |  44 +-
 stdlib/source/library/lux/abstract/monad/free.lux  |   9 +-
 .../source/library/lux/abstract/monad/indexed.lux  |  30 +-
 stdlib/source/library/lux/abstract/monoid.lux      |   4 +-
 .../source/library/lux/control/concatenative.lux   |  30 +-
 .../library/lux/control/concurrency/actor.lux      |   2 +-
 .../library/lux/control/concurrency/async.lux      |   2 +-
 .../source/library/lux/control/concurrency/frp.lux |  12 +-
 .../source/library/lux/control/concurrency/stm.lux |   2 +-
 stdlib/source/library/lux/control/continuation.lux |   2 +-
 stdlib/source/library/lux/control/exception.lux    |  28 +-
 stdlib/source/library/lux/control/io.lux           |   2 +-
 stdlib/source/library/lux/control/lazy.lux         |   2 +-
 stdlib/source/library/lux/control/maybe.lux        |   2 +-
 stdlib/source/library/lux/control/parser.lux       |   4 +-
 .../source/library/lux/control/parser/binary.lux   |   2 +-
 stdlib/source/library/lux/control/parser/json.lux  |  10 +-
 .../library/lux/control/parser/synthesis.lux       |   4 -
 stdlib/source/library/lux/control/parser/text.lux  |  34 +-
 stdlib/source/library/lux/control/parser/tree.lux  |  33 +-
 stdlib/source/library/lux/control/parser/type.lux  |   6 +-
 stdlib/source/library/lux/control/parser/xml.lux   |   2 +-
 stdlib/source/library/lux/control/pipe.lux         |   3 +-
 stdlib/source/library/lux/control/reader.lux       |   2 +-
 stdlib/source/library/lux/control/region.lux       |   6 +-
 stdlib/source/library/lux/control/remember.lux     |   9 +-
 .../source/library/lux/control/security/policy.lux |   2 +-
 stdlib/source/library/lux/control/state.lux        |   4 +-
 stdlib/source/library/lux/control/thread.lux       |   2 +-
 stdlib/source/library/lux/control/try.lux          |   4 +-
 stdlib/source/library/lux/control/writer.lux       |   4 +-
 stdlib/source/library/lux/data/bit.lux             |   4 +-
 .../source/library/lux/data/collection/array.lux   | 132 ++---
 stdlib/source/library/lux/data/collection/bits.lux |  10 +-
 .../library/lux/data/collection/dictionary.lux     | 158 +++---
 .../lux/data/collection/dictionary/ordered.lux     |  14 +-
 stdlib/source/library/lux/data/collection/list.lux |  79 +--
 stdlib/source/library/lux/data/collection/row.lux  |  62 +-
 stdlib/source/library/lux/data/collection/set.lux  |   8 +-
 .../library/lux/data/collection/set/multi.lux      |  40 +-
 .../library/lux/data/collection/set/ordered.lux    |   6 +-
 stdlib/source/library/lux/data/collection/tree.lux |  18 +-
 .../library/lux/data/collection/tree/zipper.lux    |   2 +-
 stdlib/source/library/lux/data/color.lux           |  13 -
 stdlib/source/library/lux/data/color/named.lux     |   1 -
 stdlib/source/library/lux/data/format/binary.lux   |   4 +-
 stdlib/source/library/lux/data/format/css.lux      |   4 +-
 stdlib/source/library/lux/data/format/html.lux     |  10 +-
 stdlib/source/library/lux/data/format/json.lux     |  42 +-
 stdlib/source/library/lux/data/format/tar.lux      |  54 +-
 stdlib/source/library/lux/data/format/xml.lux      |   8 +-
 stdlib/source/library/lux/data/identity.lux        |   3 +-
 stdlib/source/library/lux/data/name.lux            |   4 +-
 stdlib/source/library/lux/data/product.lux         |   1 -
 stdlib/source/library/lux/data/text.lux            |   4 +-
 stdlib/source/library/lux/data/text/buffer.lux     |  16 +-
 stdlib/source/library/lux/data/text/encoding.lux   |   1 -
 .../source/library/lux/data/text/encoding/utf8.lux |  17 +-
 stdlib/source/library/lux/data/text/escape.lux     |   4 +-
 stdlib/source/library/lux/data/text/format.lux     |  34 +-
 stdlib/source/library/lux/data/text/regex.lux      |  78 +--
 .../source/library/lux/data/text/unicode/set.lux   |  12 +-
 stdlib/source/library/lux/documentation.lux        |  38 +-
 stdlib/source/library/lux/ffi.js.lux               |   2 +-
 stdlib/source/library/lux/ffi.jvm.lux              |  17 +-
 stdlib/source/library/lux/ffi.lua.lux              |  12 +-
 stdlib/source/library/lux/ffi.old.lux              |  18 +-
 stdlib/source/library/lux/ffi.php.lux              |   2 +-
 stdlib/source/library/lux/ffi.py.lux               |  12 +-
 stdlib/source/library/lux/ffi.rb.lux               |   2 +-
 stdlib/source/library/lux/ffi.scm.lux              |   2 +-
 stdlib/source/library/lux/macro.lux                |   6 +-
 stdlib/source/library/lux/macro/code.lux           |  35 +-
 stdlib/source/library/lux/macro/template.lux       |  15 +-
 stdlib/source/library/lux/math.lux                 |  69 ++-
 stdlib/source/library/lux/math/infix.lux           |  22 +-
 stdlib/source/library/lux/math/modular.lux         |  18 +-
 stdlib/source/library/lux/math/modulus.lux         |   8 +-
 stdlib/source/library/lux/math/number.lux          |  39 +-
 stdlib/source/library/lux/math/number/complex.lux  |   7 +-
 stdlib/source/library/lux/math/number/frac.lux     | 112 ++--
 stdlib/source/library/lux/math/number/i16.lux      |   3 +-
 stdlib/source/library/lux/math/number/i32.lux      |   3 +-
 stdlib/source/library/lux/math/number/i64.lux      |  43 +-
 stdlib/source/library/lux/math/number/i8.lux       |   3 +-
 stdlib/source/library/lux/math/number/int.lux      |  47 +-
 stdlib/source/library/lux/math/number/nat.lux      |  34 +-
 stdlib/source/library/lux/math/number/ratio.lux    |  16 +-
 stdlib/source/library/lux/math/number/rev.lux      |  43 +-
 stdlib/source/library/lux/math/random.lux          |  21 +-
 stdlib/source/library/lux/meta.lux                 |  56 +-
 stdlib/source/library/lux/meta/annotation.lux      |   1 -
 stdlib/source/library/lux/meta/location.lux        |  12 +-
 stdlib/source/library/lux/target.lux               |   2 -
 stdlib/source/library/lux/target/common_lisp.lux   |   2 +-
 stdlib/source/library/lux/target/js.lux            |  10 +-
 .../library/lux/target/jvm/attribute/code.lux      |   4 +-
 stdlib/source/library/lux/target/jvm/bytecode.lux  |   8 +-
 .../jvm/bytecode/environment/limit/registry.lux    |   4 +-
 stdlib/source/library/lux/target/jvm/class.lux     |  12 +-
 .../library/lux/target/jvm/constant/pool.lux       |  10 +-
 .../source/library/lux/target/jvm/reflection.lux   |   8 +-
 stdlib/source/library/lux/target/lua.lux           |  12 +-
 stdlib/source/library/lux/target/php.lux           |  12 +-
 stdlib/source/library/lux/target/python.lux        |  10 +-
 stdlib/source/library/lux/target/r.lux             |  10 +-
 stdlib/source/library/lux/target/ruby.lux          |  10 +-
 stdlib/source/library/lux/target/scheme.lux        |   2 +-
 stdlib/source/library/lux/test.lux                 |  24 +-
 stdlib/source/library/lux/time.lux                 |  24 +-
 stdlib/source/library/lux/time/date.lux            |  34 +-
 stdlib/source/library/lux/time/day.lux             |  10 +-
 stdlib/source/library/lux/time/duration.lux        |  18 +-
 stdlib/source/library/lux/time/instant.lux         |   8 +-
 stdlib/source/library/lux/time/month.lux           |  10 +-
 stdlib/source/library/lux/time/year.lux            |  10 +-
 .../library/lux/tool/compiler/default/platform.lux |  42 +-
 .../lux/tool/compiler/language/lux/analysis.lux    |  10 +-
 .../compiler/language/lux/phase/analysis/case.lux  |  30 +-
 .../language/lux/phase/analysis/case/coverage.lux  |  52 +-
 .../language/lux/phase/analysis/function.lux       |   2 +-
 .../language/lux/phase/analysis/module.lux         |  10 +-
 .../compiler/language/lux/phase/analysis/scope.lux |  24 +-
 .../language/lux/phase/analysis/structure.lux      |  30 +-
 .../tool/compiler/language/lux/phase/directive.lux |   4 +-
 .../tool/compiler/language/lux/phase/extension.lux |   8 +-
 .../language/lux/phase/extension/analysis/jvm.lux  |  82 +--
 .../language/lux/phase/extension/directive/jvm.lux |  10 +-
 .../extension/generation/common_lisp/common.lux    |   4 +-
 .../lux/phase/extension/generation/lua/common.lux  |  20 +-
 .../lux/phase/extension/generation/php/common.lux  |  20 +-
 .../phase/extension/generation/python/common.lux   | 108 +++-
 .../lux/phase/extension/generation/r/common.lux    |   4 +-
 .../lux/phase/extension/generation/ruby/common.lux |  20 +-
 .../phase/extension/generation/scheme/common.lux   |  10 +-
 .../lux/phase/generation/common_lisp/case.lux      |  30 +-
 .../lux/phase/generation/common_lisp/function.lux  |   2 +-
 .../lux/phase/generation/common_lisp/runtime.lux   |   2 +-
 .../language/lux/phase/generation/js/case.lux      |  22 +-
 .../language/lux/phase/generation/js/function.lux  |  14 +-
 .../language/lux/phase/generation/js/loop.lux      |   4 +-
 .../language/lux/phase/generation/js/runtime.lux   |   2 +-
 .../language/lux/phase/generation/jvm/case.lux     |  22 +-
 .../language/lux/phase/generation/lua/case.lux     |  22 +-
 .../language/lux/phase/generation/lua/function.lux |  14 +-
 .../language/lux/phase/generation/lua/runtime.lux  |   2 +-
 .../language/lux/phase/generation/php/case.lux     |  22 +-
 .../language/lux/phase/generation/php/function.lux |  14 +-
 .../language/lux/phase/generation/php/loop.lux     |   6 +-
 .../language/lux/phase/generation/php/runtime.lux  |   2 +-
 .../language/lux/phase/generation/python.lux       |  45 +-
 .../language/lux/phase/generation/python/case.lux  |  22 +-
 .../lux/phase/generation/python/function.lux       |  14 +-
 .../language/lux/phase/generation/python/loop.lux  |   4 +-
 .../lux/phase/generation/python/runtime.lux        |   2 +-
 .../language/lux/phase/generation/r/case.lux       |  30 +-
 .../language/lux/phase/generation/r/function.lux   |   4 +-
 .../language/lux/phase/generation/r/loop.lux       |   2 +-
 .../language/lux/phase/generation/r/runtime.lux    |   2 +-
 .../language/lux/phase/generation/ruby/case.lux    |  22 +-
 .../lux/phase/generation/ruby/function.lux         |  14 +-
 .../language/lux/phase/generation/ruby/loop.lux    |   4 +-
 .../language/lux/phase/generation/ruby/runtime.lux |   2 +-
 .../language/lux/phase/generation/scheme/case.lux  |  30 +-
 .../lux/phase/generation/scheme/function.lux       |   2 +-
 .../language/lux/phase/generation/scheme/loop.lux  |   2 +-
 .../lux/phase/generation/scheme/runtime.lux        |   2 +-
 .../compiler/language/lux/phase/synthesis/case.lux |  56 +-
 .../language/lux/phase/synthesis/function.lux      |   2 +-
 .../compiler/language/lux/phase/synthesis/loop.lux |  34 +-
 .../language/lux/phase/synthesis/variable.lux      |  16 +-
 .../lux/tool/compiler/language/lux/syntax.lux      |   2 +-
 .../library/lux/tool/compiler/meta/archive.lux     |  28 +-
 .../lux/tool/compiler/meta/archive/artifact.lux    |  36 +-
 .../lux/tool/compiler/meta/cache/dependency.lux    |  24 +-
 .../library/lux/tool/compiler/meta/io/archive.lux  |  62 +-
 .../library/lux/tool/compiler/meta/io/context.lux  |  40 +-
 .../lux/tool/compiler/meta/packager/jvm.lux        |  22 +-
 .../lux/tool/compiler/meta/packager/scheme.lux     |  32 +-
 .../lux/tool/compiler/meta/packager/script.lux     |  30 +-
 stdlib/source/library/lux/type.lux                 |  36 +-
 stdlib/source/library/lux/type/abstract.lux        |   6 +-
 stdlib/source/library/lux/type/check.lux           |  20 +-
 stdlib/source/library/lux/type/implicit.lux        |  38 +-
 stdlib/source/library/lux/type/poly.lux            |   2 +-
 stdlib/source/library/lux/type/resource.lux        |  18 +-
 stdlib/source/library/lux/world/file/watch.lux     |  92 +--
 .../source/library/lux/world/net/http/request.lux  |  26 +-
 .../source/library/lux/world/net/http/response.lux |   8 +-
 stdlib/source/library/lux/world/shell.lux          |  32 +-
 stdlib/source/poly/lux/abstract/equivalence.lux    |   4 +-
 stdlib/source/poly/lux/data/format/json.lux        | 139 ++---
 stdlib/source/program/aedifex/command/build.lux    |  32 +-
 stdlib/source/program/aedifex/command/deploy.lux   |   4 +-
 stdlib/source/program/aedifex/command/deps.lux     |   4 +-
 stdlib/source/program/aedifex/command/install.lux  |   4 +-
 stdlib/source/program/aedifex/command/pom.lux      |   4 +-
 .../program/aedifex/dependency/deployment.lux      |   4 +-
 .../program/aedifex/dependency/resolution.lux      |   8 +-
 stdlib/source/program/aedifex/hash.lux             |  16 +-
 stdlib/source/program/aedifex/input.lux            |   2 +-
 .../source/program/aedifex/metadata/artifact.lux   |   8 +-
 .../source/program/aedifex/metadata/snapshot.lux   |   8 +-
 stdlib/source/program/aedifex/package.lux          |   2 +-
 stdlib/source/program/aedifex/pom.lux              |   6 +-
 stdlib/source/program/aedifex/project.lux          |  10 +-
 .../source/program/aedifex/repository/identity.lux |   2 +-
 stdlib/source/program/compositor/import.lux        |  36 +-
 stdlib/source/program/scriptum.lux                 |  20 +-
 .../specification/compositor/generation/case.lux   |  10 +-
 stdlib/source/specification/lux/abstract/apply.lux |  25 +-
 stdlib/source/specification/lux/abstract/codec.lux |   2 +-
 stdlib/source/specification/lux/abstract/fold.lux  |  23 -
 stdlib/source/specification/lux/abstract/mix.lux   |  23 +
 stdlib/source/specification/lux/world/file.lux     |   6 +-
 stdlib/source/test/aedifex/command/auto.lux        |   2 +-
 stdlib/source/test/aedifex/command/deploy.lux      |  10 +-
 stdlib/source/test/aedifex/command/deps.lux        |   4 +-
 stdlib/source/test/aedifex/command/pom.lux         |   4 +-
 .../source/test/aedifex/dependency/deployment.lux  |  10 +-
 .../source/test/aedifex/dependency/resolution.lux  |  42 +-
 stdlib/source/test/aedifex/hash.lux                |   4 +-
 stdlib/source/test/aedifex/input.lux               |   2 +-
 stdlib/source/test/aedifex/package.lux             |   4 +-
 stdlib/source/test/aedifex/repository/local.lux    |   2 +-
 stdlib/source/test/aedifex/repository/remote.lux   |   6 +-
 stdlib/source/test/lux/abstract.lux                |   4 +-
 stdlib/source/test/lux/abstract/apply.lux          |   6 +-
 stdlib/source/test/lux/abstract/codec.lux          |   6 +-
 stdlib/source/test/lux/abstract/enum.lux           |  14 +-
 stdlib/source/test/lux/abstract/fold.lux           |  26 -
 stdlib/source/test/lux/abstract/mix.lux            |  26 +
 stdlib/source/test/lux/abstract/monad.lux          |  16 +-
 stdlib/source/test/lux/abstract/monoid.lux         |   4 +-
 stdlib/source/test/lux/control/concurrency/frp.lux |  26 +-
 stdlib/source/test/lux/control/function/memo.lux   |   4 +-
 stdlib/source/test/lux/control/function/mixin.lux  |   4 +-
 stdlib/source/test/lux/control/parser/binary.lux   |  16 +-
 stdlib/source/test/lux/control/parser/cli.lux      |   6 +-
 stdlib/source/test/lux/control/parser/text.lux     |  28 +-
 stdlib/source/test/lux/data/binary.lux             |   4 +-
 stdlib/source/test/lux/data/collection/array.lux   |   6 +-
 stdlib/source/test/lux/data/collection/list.lux    |  18 +-
 .../test/lux/data/collection/queue/priority.lux    |  12 +-
 stdlib/source/test/lux/data/collection/row.lux     |   8 +-
 .../source/test/lux/data/collection/set/multi.lux  |  12 +-
 stdlib/source/test/lux/data/collection/tree.lux    |  10 +-
 .../test/lux/data/collection/tree/finger.lux       |  10 +-
 stdlib/source/test/lux/data/format/json.lux        |   2 +-
 stdlib/source/test/lux/data/format/tar.lux         |   6 +-
 stdlib/source/test/lux/data/name.lux               |   2 +-
 stdlib/source/test/lux/data/text/encoding.lux      |  10 +-
 stdlib/source/test/lux/data/text/escape.lux        |   4 +-
 stdlib/source/test/lux/data/text/format.lux        |   4 +-
 stdlib/source/test/lux/locale/language.lux         |  34 +-
 stdlib/source/test/lux/locale/territory.lux        |  38 +-
 stdlib/source/test/lux/math/modular.lux            |   4 +-
 stdlib/source/test/lux/math/number.lux             |   6 +-
 stdlib/source/test/lux/math/number/i64.lux         |   2 +-
 stdlib/source/test/lux/time.lux                    |   8 +-
 stdlib/source/test/lux/time/date.lux               |   2 +-
 stdlib/source/test/lux/time/day.lux                |   2 +-
 stdlib/source/test/lux/time/instant.lux            |   8 +-
 stdlib/source/test/lux/time/month.lux              |   8 +-
 .../compiler/language/lux/phase/synthesis/case.lux |  46 +-
 .../language/lux/phase/synthesis/function.lux      |  38 +-
 .../language/lux/phase/synthesis/variable.lux      |  14 +-
 stdlib/source/test/lux/type/check.lux              |  12 +-
 stdlib/source/test/lux/world/net/http/client.lux   |   8 +-
 313 files changed, 4183 insertions(+), 2873 deletions(-)
 delete mode 100644 stdlib/source/documentation/lux/abstract/fold.lux
 create mode 100644 stdlib/source/documentation/lux/abstract/mix.lux
 create mode 100644 stdlib/source/documentation/lux/math/modular.lux
 create mode 100644 stdlib/source/documentation/lux/math/modulus.lux
 create mode 100644 stdlib/source/documentation/lux/math/number.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/complex.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/frac.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/i16.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/i32.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/i64.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/i8.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/int.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/nat.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/ratio.lux
 create mode 100644 stdlib/source/documentation/lux/math/number/rev.lux
 create mode 100644 stdlib/source/documentation/lux/math/random.lux
 create mode 100644 stdlib/source/documentation/lux/meta.lux
 create mode 100644 stdlib/source/documentation/lux/meta/annotation.lux
 create mode 100644 stdlib/source/documentation/lux/meta/location.lux
 create mode 100644 stdlib/source/documentation/lux/static.lux
 create mode 100644 stdlib/source/documentation/lux/target.lux
 delete mode 100644 stdlib/source/library/lux/abstract/fold.lux
 create mode 100644 stdlib/source/library/lux/abstract/mix.lux
 delete mode 100644 stdlib/source/specification/lux/abstract/fold.lux
 create mode 100644 stdlib/source/specification/lux/abstract/mix.lux
 delete mode 100644 stdlib/source/test/lux/abstract/fold.lux
 create mode 100644 stdlib/source/test/lux/abstract/mix.lux

(limited to 'stdlib')

diff --git a/stdlib/source/documentation/lux.lux b/stdlib/source/documentation/lux.lux
index 4a964e552..ac01ef0f1 100644
--- a/stdlib/source/documentation/lux.lux
+++ b/stdlib/source/documentation/lux.lux
@@ -17,13 +17,14 @@
    ["#." ffi]
    ["#." locale]
    ["#." macro]
-   ... ["#." math]
-   ... ["#." meta]
+   ["#." math]
+   ["#." meta]
    ["#." program]
-   ... ["#." target]
+   ["#." static]
+   ["#." target]
    ... ["#." test]
    ... ["#." time]
-   ... ... ["#." tool] ... TODO: Update & expand tests for this
+   ... ... ["#." tool] ... TODO: Documentation for this
    ... ["#." type]
    ... ["#." world]
    ... ["#." extension]
@@ -44,8 +45,11 @@
              /ffi.documentation
              /locale.documentation
              /macro.documentation
-
-             /program.documentation]))
+             /math.documentation
+             /meta.documentation
+             /program.documentation
+             /static.documentation
+             /target.documentation]))
 
 (program: inputs
   (io.io (debug.log! ($.documentation ..documentation))))
diff --git a/stdlib/source/documentation/lux/abstract.lux b/stdlib/source/documentation/lux/abstract.lux
index a8c0d3b03..11d002127 100644
--- a/stdlib/source/documentation/lux/abstract.lux
+++ b/stdlib/source/documentation/lux/abstract.lux
@@ -13,7 +13,7 @@
    ["#." comonad]
    ["#." enum]
    ["#." equivalence]
-   ["#." fold]
+   ["#." mix]
    ["#." functor]
    ["#." hash]
    ["#." interval]
@@ -30,7 +30,7 @@
          /comonad.documentation
          /enum.documentation
          /equivalence.documentation
-         /fold.documentation
+         /mix.documentation
          /functor.documentation
          /hash.documentation
          /interval.documentation
diff --git a/stdlib/source/documentation/lux/abstract/fold.lux b/stdlib/source/documentation/lux/abstract/fold.lux
deleted file mode 100644
index 33a12a91c..000000000
--- a/stdlib/source/documentation/lux/abstract/fold.lux
+++ /dev/null
@@ -1,24 +0,0 @@
-(.module:
-  [library
-   [lux
-    ["$" documentation (#+ documentation:)]
-    [data
-     [text (#+ \n)
-      ["%" format (#+ format)]]]]]
-  [\\library
-   ["." /]])
-
-(documentation: /.Fold
-  "Iterate over a structure's values to build a summary value.")
-
-(documentation: /.with_monoid
-  "Fold over a foldable structure using the monoid's identity as the initial value."
-  [(with_monoid monoid fold value)])
-
-(.def: .public documentation
-  (.List $.Module)
-  ($.module /._
-            ""
-            [..Fold
-             ..with_monoid]
-            []))
diff --git a/stdlib/source/documentation/lux/abstract/mix.lux b/stdlib/source/documentation/lux/abstract/mix.lux
new file mode 100644
index 000000000..73b23e628
--- /dev/null
+++ b/stdlib/source/documentation/lux/abstract/mix.lux
@@ -0,0 +1,24 @@
+(.module:
+  [library
+   [lux
+    ["$" documentation (#+ documentation:)]
+    [data
+     [text (#+ \n)
+      ["%" format (#+ format)]]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.Mix
+  "Iterate over a structure's values to build a summary value.")
+
+(documentation: /.with_monoid
+  "Mix a mixable structure using the monoid's identity as the initial value."
+  [(with_monoid monoid mix value)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..Mix
+             ..with_monoid]
+            []))
diff --git a/stdlib/source/documentation/lux/abstract/monad.lux b/stdlib/source/documentation/lux/abstract/monad.lux
index 07318bce9..cdf12eedf 100644
--- a/stdlib/source/documentation/lux/abstract/monad.lux
+++ b/stdlib/source/documentation/lux/abstract/monad.lux
@@ -37,9 +37,9 @@
   "Filter the values in a list with a monadic function."
   [(only monad predicate items)])
 
-(documentation: /.fold
-  "Fold a list with a monadic function."
-  [(fold monad function initial_value items)])
+(documentation: /.mix
+  "Mix a list with a monadic function."
+  [(mix monad function initial_value items)])
 
 (.def: .public documentation
   (.List $.Module)
@@ -51,5 +51,5 @@
              ..all
              ..map
              ..only
-             ..fold]
+             ..mix]
             [/free.documentation]))
diff --git a/stdlib/source/documentation/lux/control/concurrency/frp.lux b/stdlib/source/documentation/lux/control/concurrency/frp.lux
index 728e93be5..74ddc31e2 100644
--- a/stdlib/source/documentation/lux/control/concurrency/frp.lux
+++ b/stdlib/source/documentation/lux/control/concurrency/frp.lux
@@ -32,9 +32,9 @@
   "A one-element channel containing the output from an async."
   [(of_async async)])
 
-(documentation: /.aggregate
-  "Asynchronous fold over channels."
-  [(aggregate f init channel)])
+(documentation: /.mix
+  "Asynchronous mix over channels."
+  [(mix f init channel)])
 
 (documentation: /.sequential
   "Transforms the given list into a channel with the same elements."
@@ -50,14 +50,14 @@
              ..Subscriber
              ..only
              ..of_async
-             ..aggregate
+             ..mix
              ..sequential
              ($.default /.channel_is_already_closed)
              ($.default /.functor)
              ($.default /.apply)
              ($.default /.monad)
              ($.default /.subscribe!)
-             ($.default /.aggregates)
+             ($.default /.mixes)
              ($.default /.poll)
              ($.default /.periodic)
              ($.default /.iterations)
diff --git a/stdlib/source/documentation/lux/control/pipe.lux b/stdlib/source/documentation/lux/control/pipe.lux
index f18415290..284a2ec20 100644
--- a/stdlib/source/documentation/lux/control/pipe.lux
+++ b/stdlib/source/documentation/lux/control/pipe.lux
@@ -80,7 +80,7 @@
   [(|> +5
        (tuple> [(i.* +10)]
                [-- (i./ +2)]
-               [i\encode]))
+               [i\encoded]))
    "=>"
    [+50 +2 "+5"]])
 
@@ -103,7 +103,7 @@
 (.def: .public documentation
   (.List $.Module)
   ($.module /._
-            ""
+            "Composable extensions to the piping macros (|> and <|) that enhance them with various abilities."
             [..new>
              ..let>
              ..cond>
diff --git a/stdlib/source/documentation/lux/data/collection/array.lux b/stdlib/source/documentation/lux/data/collection/array.lux
index 3bf22b587..e36cba1a8 100644
--- a/stdlib/source/documentation/lux/data/collection/array.lux
+++ b/stdlib/source/documentation/lux/data/collection/array.lux
@@ -118,7 +118,7 @@
              ($.default /.equivalence)
              ($.default /.monoid)
              ($.default /.functor)
-             ($.default /.fold)
+             ($.default /.mix)
              ($.default /.every?)
              ($.default /.any?)]
             []))
diff --git a/stdlib/source/documentation/lux/data/collection/list.lux b/stdlib/source/documentation/lux/data/collection/list.lux
index 1050ab7ce..87cf01da1 100644
--- a/stdlib/source/documentation/lux/data/collection/list.lux
+++ b/stdlib/source/documentation/lux/data/collection/list.lux
@@ -15,9 +15,9 @@
   [\\library
    ["." /]])
 
-(documentation: /.aggregates
+(documentation: /.mixes
   ""
-  [(aggregates f init inputs)])
+  [(mixes f init inputs)])
 
 (documentation: /.reversed
   ""
@@ -181,7 +181,7 @@
   (.List $.Module)
   ($.module /._
             ""
-            [..aggregates
+            [..mixes
              ..reversed
              ..only
              ..partition
@@ -225,7 +225,7 @@
              ..lifted
              ..enumeration
              ..when
-             ($.default /.fold)
+             ($.default /.mix)
              ($.default /.equivalence)
              ($.default /.hash)
              ($.default /.monoid)
diff --git a/stdlib/source/documentation/lux/data/collection/row.lux b/stdlib/source/documentation/lux/data/collection/row.lux
index e72e8974e..a49b12bd4 100644
--- a/stdlib/source/documentation/lux/data/collection/row.lux
+++ b/stdlib/source/documentation/lux/data/collection/row.lux
@@ -75,7 +75,7 @@
              ($.default /.of_list)
              ($.default /.empty?)
              ($.default /.equivalence)
-             ($.default /.fold)
+             ($.default /.mix)
              ($.default /.monoid)
              ($.default /.functor)
              ($.default /.apply)
diff --git a/stdlib/source/documentation/lux/data/color.lux b/stdlib/source/documentation/lux/data/color.lux
index 96a44b6ed..2a439f7c3 100644
--- a/stdlib/source/documentation/lux/data/color.lux
+++ b/stdlib/source/documentation/lux/data/color.lux
@@ -77,6 +77,19 @@
 (documentation: /.Pigment
   "A color with some degree of transparency.")
 
+(template [<name>]
+  [(`` (documentation: <name>
+         (format "A "
+                 (text.replaced "_" "-" (~~ (template.text [<name>])))
+                 " color scheme.")))]
+
+  [/.triad]
+  [/.clash]
+  [/.split_complement]
+  [/.square]
+  [/.tetradic]
+  )
+
 (.def: .public documentation
   (.List $.Module)
   ($.module /._
@@ -101,6 +114,13 @@
              ..translucent
              ..opaque
              ..Pigment
+
+             ..triad
+             ..clash
+             ..split_complement
+             ..square
+             ..tetradic
+
              ($.default /.of_rgb)
              ($.default /.rgb)
              ($.default /.equivalence)
@@ -116,11 +136,6 @@
              ($.default /.cmyk)
              ($.default /.of_cmyk)
              ($.default /.gray_scale)
-             ($.default /.triad)
-             ($.default /.clash)
-             ($.default /.split_complement)
-             ($.default /.square)
-             ($.default /.tetradic)
              ($.default /.Spread)
              ($.default /.Palette)]
             [/named.documentation]))
diff --git a/stdlib/source/documentation/lux/data/color/named.lux b/stdlib/source/documentation/lux/data/color/named.lux
index 6f9a080eb..b0a6d88ba 100644
--- a/stdlib/source/documentation/lux/data/color/named.lux
+++ b/stdlib/source/documentation/lux/data/color/named.lux
@@ -14,7 +14,7 @@
      ["." template]]
     [math
      [number
-      ["." nat ("#\." hex)]]]]]
+      ["." nat ("hex\." hex)]]]]]
   [\\library
    ["." /
     ["/#" //]]])
@@ -23,9 +23,9 @@
   [(documentation: <name>
      (let [[red green blue] (//.rgb <name>)
            [_ name] (name_of <name>)]
-       (format "R:" (nat\encode red)
-               " G:" (nat\encode green)
-               " B:" (nat\encode blue)
+       (format "R:" (hex\encoded red)
+               " G:" (hex\encoded green)
+               " B:" (hex\encoded blue)
                " | " (text.replaced "_" " " name))))]
 
   [/.alice_blue]
diff --git a/stdlib/source/documentation/lux/data/product.lux b/stdlib/source/documentation/lux/data/product.lux
index 78d0d5aaa..f1abaffcd 100644
--- a/stdlib/source/documentation/lux/data/product.lux
+++ b/stdlib/source/documentation/lux/data/product.lux
@@ -39,7 +39,7 @@
 (.def: .public documentation
   (.List $.Module)
   ($.module /._
-            ""
+            "Functionality for working with tuples (particularly 2-tuples/pairs)."
             [..left
              ..right
              ..curried
diff --git a/stdlib/source/documentation/lux/data/text/encoding/utf8.lux b/stdlib/source/documentation/lux/data/text/encoding/utf8.lux
index cfe8aee01..dc9a199f3 100644
--- a/stdlib/source/documentation/lux/data/text/encoding/utf8.lux
+++ b/stdlib/source/documentation/lux/data/text/encoding/utf8.lux
@@ -10,9 +10,12 @@
   [\\library
    ["." /]])
 
+(documentation: /.codec
+  "A codec for binary encoding of text as UTF-8.")
+
 (.def: .public documentation
   (.List $.Module)
   ($.module /._
             ""
-            [($.default /.codec)]
+            [..codec]
             []))
diff --git a/stdlib/source/documentation/lux/data/text/unicode/block.lux b/stdlib/source/documentation/lux/data/text/unicode/block.lux
index 703ac9f58..faa9d8833 100644
--- a/stdlib/source/documentation/lux/data/text/unicode/block.lux
+++ b/stdlib/source/documentation/lux/data/text/unicode/block.lux
@@ -9,7 +9,7 @@
      ["." template]]
     [math
      [number
-      ["." nat ("#\." hex)]]]]]
+      ["." nat ("hex\." hex)]]]]]
   [\\library
    ["." /]])
 
@@ -27,8 +27,8 @@
 (template [<name>]
   [(documentation: <name>
      (let [[_ name] (name_of <name>)]
-       (format (nat\encode (/.start <name>))
-               "-" (nat\encode (/.end <name>))
+       (format (hex\encoded (/.start <name>))
+               "-" (hex\encoded (/.end <name>))
                " | " (text.replaced "_" " " name))))]
 
   [/.basic_latin]
diff --git a/stdlib/source/documentation/lux/macro/template.lux b/stdlib/source/documentation/lux/macro/template.lux
index 894d68c3d..7b2d0bf2e 100644
--- a/stdlib/source/documentation/lux/macro/template.lux
+++ b/stdlib/source/documentation/lux/macro/template.lux
@@ -65,7 +65,7 @@
 (.def: .public documentation
   (.List $.Module)
   ($.module /._
-            ""
+            "Utilities commonly used while templating."
             [..spliced
              ..amount
              ..with_locals
diff --git a/stdlib/source/documentation/lux/math.lux b/stdlib/source/documentation/lux/math.lux
index 7c74692ca..f41afe130 100644
--- a/stdlib/source/documentation/lux/math.lux
+++ b/stdlib/source/documentation/lux/math.lux
@@ -9,20 +9,73 @@
       ["." list]]]]]
   ["." / #_
    ["#." infix]
-   ... ["#." modulus]
-   ... ["#." modular]
-   ... ["#." number]
-   ["#." logic]]
+   ["#." modulus]
+   ["#." modular]
+   ["#." number]
+   ["#." logic]
+   ["#." random]]
   [\\library
    ["." /]])
 
+(documentation: /.e
+  "The base of the natural logarithm.")
+
+(documentation: /.pi
+  "The ratio of a circle's circumference to its diameter.")
+
+(documentation: /.tau
+  "The ratio of a circle's circumference to its radius.")
+
+(documentation: /.pow
+  ""
+  [(pow param subject)])
+
+(documentation: /.atan/2
+  ""
+  [(atan/2 x y)])
+
+(documentation: /.log'
+  ""
+  [(log' base it)])
+
 (.def: .public documentation
   (.List $.Module)
   ($.module /._
-            ""
-            []
+            "Common mathematical constants and functions."
+            [..e
+             ..pi
+             ..tau
+             ..pow
+             ..atan/2
+             ..log'
+             ($.default /.cos)
+             ($.default /.sin)
+             ($.default /.tan)
+             ($.default /.acos)
+             ($.default /.asin)
+             ($.default /.atan)
+             ($.default /.exp)
+             ($.default /.log)
+             ($.default /.ceil)
+             ($.default /.floor)
+             ($.default /.root/2)
+             ($.default /.root/3)
+             ($.default /.round)
+             ($.default /.factorial)
+             ($.default /.hypotenuse)
+             ($.default /.sinh)
+             ($.default /.cosh)
+             ($.default /.tanh)
+             ($.default /.coth)
+             ($.default /.asinh)
+             ($.default /.acosh)
+             ($.default /.atanh)
+             ($.default /.acoth)
+             ($.default /.asech)
+             ($.default /.acsch)]
             [/infix.documentation
-             ... /modulus.documentation
-             ... /modular.documentation
-             ... /number.documentation
-             /logic.documentation]))
+             /modulus.documentation
+             /modular.documentation
+             /number.documentation
+             /logic.documentation
+             /random.documentation]))
diff --git a/stdlib/source/documentation/lux/math/infix.lux b/stdlib/source/documentation/lux/math/infix.lux
index ccb72f665..add6876f2 100644
--- a/stdlib/source/documentation/lux/math/infix.lux
+++ b/stdlib/source/documentation/lux/math/infix.lux
@@ -27,5 +27,5 @@
   (.List $.Module)
   ($.module /._
             ""
-            []
+            [..infix]
             []))
diff --git a/stdlib/source/documentation/lux/math/logic.lux b/stdlib/source/documentation/lux/math/logic.lux
index 1b455c23e..f5aaddfc3 100644
--- a/stdlib/source/documentation/lux/math/logic.lux
+++ b/stdlib/source/documentation/lux/math/logic.lux
@@ -6,17 +6,13 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list]]]]]
+      ["." list ("#\." monoid)]]]]]
   ["." / #_
    ["#." continuous]
-   ["#." fuzzy]]
-  [\\library
-   ["." /]])
+   ["#." fuzzy]])
 
 (.def: .public documentation
   (.List $.Module)
-  ($.module /._
-            ""
-            []
-            [/continuous.documentation
-             /fuzzy.documentation]))
+  ($_ list\compose
+      /continuous.documentation
+      /fuzzy.documentation))
diff --git a/stdlib/source/documentation/lux/math/modular.lux b/stdlib/source/documentation/lux/math/modular.lux
new file mode 100644
index 000000000..f0c4c9f33
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/modular.lux
@@ -0,0 +1,53 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.Mod
+  "A number under a modulus.")
+
+(documentation: /.modular
+  ""
+  [(modular modulus value)])
+
+(documentation: /.adapter
+  ""
+  [(adapter reference subject)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..Mod
+             ..modular
+             ..adapter
+             ($.default /.modulus)
+             ($.default /.value)
+             ($.default /.incorrect_modulus)
+             ($.default /.codec)
+
+             ($.default /.=)
+             ($.default /.<)
+             ($.default /.<=)
+             ($.default /.>)
+             ($.default /.>=)
+
+             ($.default /.equivalence)
+             ($.default /.order)
+
+             ($.default /.+)
+             ($.default /.-)
+             ($.default /.*)
+             
+             ($.default /.addition)
+             ($.default /.multiplication)
+             ($.default /.inverse)
+             ($.default /.moduli_are_not_equal)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/modulus.lux b/stdlib/source/documentation/lux/math/modulus.lux
new file mode 100644
index 000000000..c97eaa270
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/modulus.lux
@@ -0,0 +1,39 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.Modulus
+  (format "A number used as a modulus in modular arithmetic."
+          \n "It cannot be 0."))
+
+(documentation: /.congruent?
+  ""
+  [(congruent? modulus reference subject)])
+
+(documentation: /.literal
+  ""
+  ["Success!"
+   (literal 123)]
+  ["Failure!"
+   (literal 0)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..Modulus
+             ..congruent?
+             ..literal
+             ($.default /.zero_cannot_be_a_modulus)
+             ($.default /.modulus)
+             ($.default /.divisor)
+             ($.default /.=)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number.lux b/stdlib/source/documentation/lux/math/number.lux
new file mode 100644
index 000000000..d4243f21d
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number.lux
@@ -0,0 +1,52 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]]
+  ["." / #_
+   ["#." i8]
+   ["#." i16]
+   ["#." i32]
+   ["#." i64]
+   ["#." nat]
+   ["#." int]
+   ["#." rev]
+   ["#." frac]
+   ["#." ratio]
+   ["#." complex]])
+
+(template [<name> <encoding> <no_commas> <with_commas>]
+  [(documentation: <name>
+     (format "Given syntax for a " <encoding> " number, generates a Nat, an Int, a Rev or a Frac.")
+     [<no_commas>]
+     ["Allows for the presence of commas (,) among the digits."
+      <with_commas>])]
+
+  [/.bin "binary" (bin "11001001") (bin "11,00,10,01")]
+  [/.oct "octal" (oct "615243") (oct "615,243")]
+  [/.hex "hexadecimal" (hex "deadBEEF") (hex "dead,BEEF")]
+  )
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..bin
+             ..oct
+             ..hex]
+            [/i8.documentation
+             /i16.documentation
+             /i32.documentation
+             /i64.documentation
+             /nat.documentation
+             /int.documentation
+             /rev.documentation
+             /frac.documentation
+             /ratio.documentation
+             /complex.documentation]))
diff --git a/stdlib/source/documentation/lux/math/number/complex.lux b/stdlib/source/documentation/lux/math/number/complex.lux
new file mode 100644
index 000000000..0a56b0d85
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/complex.lux
@@ -0,0 +1,64 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.Complex
+  "A complex number.")
+
+(documentation: /.complex
+  "Complex literals."
+  [(complex real imaginary)]
+  ["The imaginary part can be omitted if it's +0.0."
+   (complex real)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            "Complex arithmetic."
+            [..Complex
+             ..complex
+             ($.default /.i)
+             ($.default /.+one)
+             ($.default /.-one)
+             ($.default /.zero)
+             ($.default /.not_a_number?)
+             ($.default /.=)
+             ($.default /.+)
+             ($.default /.-)
+             ($.default /.equivalence)
+             ($.default /.opposite)
+             ($.default /.signum)
+             ($.default /.conjugate)
+             ($.default /.*')
+             ($.default /.*)
+             ($.default /./)
+             ($.default /./')
+             ($.default /.%)
+             ($.default /.cos)
+             ($.default /.cosh)
+             ($.default /.sin)
+             ($.default /.sinh)
+             ($.default /.tan)
+             ($.default /.tanh)
+             ($.default /.abs)
+             ($.default /.exp)
+             ($.default /.log)
+             ($.default /.pow)
+             ($.default /.pow')
+             ($.default /.root/2)
+             ($.default /.reciprocal)
+             ($.default /.acos)
+             ($.default /.asin)
+             ($.default /.atan)
+             ($.default /.argument)
+             ($.default /.roots)
+             ($.default /.approximately?)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/frac.lux b/stdlib/source/documentation/lux/math/number/frac.lux
new file mode 100644
index 000000000..a161327fa
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/frac.lux
@@ -0,0 +1,127 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.=
+  "Frac(tion) equivalence."
+  [(= reference sample)])
+
+(documentation: /.<
+  "Frac(tion) less-than."
+  [(< reference sample)])
+
+(documentation: /.<=
+  "Frac(tion) less-than or equal."
+  [(<= reference sample)])
+
+(documentation: /.>
+  "Frac(tion) greater-than."
+  [(> reference sample)])
+
+(documentation: /.>=
+  "Frac(tion) greater-than or equal."
+  [(>= reference sample)])
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> param subject)])]
+
+  [/.+ "Frac(tion) addition."]
+  [/.- "Frac(tion) substraction."]
+  [/.* "Frac(tion) multiplication."]
+  [/./ "Frac(tion) division."]
+  [/.% "Frac(tion) remainder."]
+  )
+
+(documentation: /./%
+  ""
+  [(/% param subject)])
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> left right)])]
+
+  [/.min "Frac(tion) minimum."]
+  [/.max "Frac(tion) minimum."]
+  )
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>)]
+
+  [/.not_a_number "Not a number."]
+  [/.positive_infinity "Positive infinity."]
+  [/.negative_infinity "Negative infinity."]
+  )
+
+(documentation: /.not_a_number?
+  "Tests whether a frac is actually not-a-number."
+  [(not_a_number? it)])
+
+(documentation: /.approximately?
+  ""
+  [(approximately? margin_of_error standard value)])
+
+(documentation: /.mod
+  ""
+  [(mod divisor dividend)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..=
+             ..<
+             ..<=
+             ..>
+             ..>=
+             ..+
+             ..-
+             ..*
+             ../
+             ..%
+             ../%
+             ..min
+             ..max
+             ..not_a_number
+             ..positive_infinity
+             ..negative_infinity
+             ..not_a_number?
+             ..approximately?
+             ..mod
+             ($.default /.positive?)
+             ($.default /.negative?)
+             ($.default /.zero?)
+             ($.default /.opposite)
+             ($.default /.abs)
+             ($.default /.signum)
+             ($.default /.nat)
+             ($.default /.int)
+             ($.default /.rev)
+             ($.default /.equivalence)
+             ($.default /.order)
+             ($.default /.smallest)
+             ($.default /.biggest)
+             ($.default /.addition)
+             ($.default /.addition)
+             ($.default /.minimum)
+             ($.default /.maximum)
+             ($.default /.number?)
+             ($.default /.decimal)
+             ($.default /.bits)
+             ($.default /.of_bits)
+             ($.default /.binary)
+             ($.default /.octal)
+             ($.default /.hex)
+             ($.default /.hash)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/i16.lux b/stdlib/source/documentation/lux/math/number/i16.lux
new file mode 100644
index 000000000..a38b3cbff
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/i16.lux
@@ -0,0 +1,25 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.I16
+  "A 16-bit integer.")
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..I16
+             ($.default /.equivalence)
+             ($.default /.width)
+             ($.default /.i16)
+             ($.default /.i64)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/i32.lux b/stdlib/source/documentation/lux/math/number/i32.lux
new file mode 100644
index 000000000..5f438cc50
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/i32.lux
@@ -0,0 +1,25 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.I32
+  "A 32-bit integer.")
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..I32
+             ($.default /.equivalence)
+             ($.default /.width)
+             ($.default /.i32)
+             ($.default /.i64)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/i64.lux b/stdlib/source/documentation/lux/math/number/i64.lux
new file mode 100644
index 000000000..9a7d3aead
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/i64.lux
@@ -0,0 +1,123 @@
+(.module:
+  [library
+   [lux (#- or and not)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> parameter subject)])]
+
+  [/.or "Bitwise or."]
+  [/.xor "Bitwise xor."]
+  [/.and "Bitwise and."]
+  
+  [/.left_shifted "Bitwise left-shift."]
+  [/.right_shifted "Unsigned/logic bitwise right-shift."]
+  )
+
+(documentation: /.Mask
+  "A pattern of bits that can be imposed on I64 values.")
+
+(documentation: /.bit
+  "A mask with only a specific bit set."
+  [(bit position)])
+
+(documentation: /.sign
+  "A mask for the sign bit of ints.")
+
+(documentation: /.not
+  "Bitwise negation.")
+
+(documentation: /.mask
+  "Mask a block of bits of the specified size."
+  [(mask amount_of_bits)])
+
+(documentation: /.ones
+  "Count the number of 1s in a bit-map."
+  [(ones it)])
+
+(documentation: /.zero
+  "Clear bit at the given index."
+  [(zero index input)])
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> index input)])]
+
+  [/.one "Set bit at given index."]
+  [/.flipped "Flip bit at given index."]
+  )
+
+(documentation: /.one?
+  ""
+  [(one? index input)])
+
+(documentation: /.zero?
+  ""
+  [(zero? index input)])
+
+(template [<name>]
+  [(documentation: <name>
+     ""
+     [(<name> distance input)])]
+
+  [/.left_rotated]
+  [/.right_rotated]
+  )
+
+(documentation: /.region
+  "A mask for a block of bits of the given size, starting at the given offset."
+  [(region offset size)])
+
+(documentation: /.Sub
+  "A sub-space of I64 with a reduce amount of bits.")
+
+(documentation: /.sub
+  "Given a width in the interval (0,64), yields an implementation for integers of that width."
+  [(sub width)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..or
+             ..xor
+             ..and
+             ..left_shifted
+             ..right_shifted
+             ..Mask
+             ..bit
+             ..sign
+             ..not
+             ..mask
+             ..ones
+             ..zero
+             ..one
+             ..flipped
+             ..one?
+             ..zero?
+             ..left_rotated
+             ..right_rotated
+             ..region
+             ..Sub
+             ..sub
+             ($.default /.bits_per_byte)
+             ($.default /.bytes_per_i64)
+             ($.default /.width)
+             ($.default /.false)
+             ($.default /.true)
+             ($.default /.equivalence)
+             ($.default /.hash)
+             ($.default /.disjunction)
+             ($.default /.conjunction)
+             ($.default /.reversed)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/i8.lux b/stdlib/source/documentation/lux/math/number/i8.lux
new file mode 100644
index 000000000..e7022c20e
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/i8.lux
@@ -0,0 +1,25 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.I8
+  "A 8-bit integer.")
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..I8
+             ($.default /.equivalence)
+             ($.default /.width)
+             ($.default /.i8)
+             ($.default /.i64)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/int.lux b/stdlib/source/documentation/lux/math/number/int.lux
new file mode 100644
index 000000000..fc066a37a
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/int.lux
@@ -0,0 +1,127 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.=
+  "Int(eger) equivalence."
+  [(= reference sample)])
+
+(documentation: /.<
+  "Int(eger) less-than."
+  [(< reference sample)])
+
+(documentation: /.<=
+  "Int(eger) less-than or equal."
+  [(<= reference sample)])
+
+(documentation: /.>
+  "Int(eger) greater-than."
+  [(> reference sample)])
+
+(documentation: /.>=
+  "Int(eger) greater-than or equal."
+  [(>= reference sample)])
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> left right)])]
+
+  [/.min "Int(eger) minimum."]
+  [/.max "Int(eger) maximum."]
+  )
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> param subject)])]
+
+  [/.+ "Int(eger) addition."]
+  [/.- "Int(eger) substraction."]
+  [/.* "Int(eger) multiplication."]
+  [/./ "Int(eger) division."]
+  [/.% "Int(eger) remainder."]
+  [/./% "Int(eger) [division remainder]."]
+  )
+
+(documentation: /.opposite
+  "A value of equal magnitude and opposite sign.")
+
+(documentation: /.abs
+  "A value of equal magnitude and positive sign.")
+
+(documentation: /.signum
+  "A value (either -1, 0 or +0) which represents the sign.")
+
+(documentation: /.mod
+  (format "Integer modulo."
+          \n "Note: The modulo and the remainder are not the same.")
+  [(mod divisor dividend)])
+
+(documentation: /.gcd
+  "Greatest Common Divisor.")
+
+(documentation: /.extended_gcd
+  "Extended euclidean algorithm.")
+
+(documentation: /.lcm
+  "Least Common Multiple.")
+
+(documentation: /.right_shifted
+  "Signed/arithmetic bitwise right-shift."
+  [(right_shifted parameter subject)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..=
+             ..<
+             ..<=
+             ..>
+             ..>=
+             ..min
+             ..max
+             ..+
+             ..-
+             ..*
+             ../
+             ..%
+             ../%
+             ..opposite
+             ..abs
+             ..signum
+             ..mod
+             ..gcd
+             ..extended_gcd
+             ..lcm
+             ..right_shifted
+             ($.default /.positive?)
+             ($.default /.negative?)
+             ($.default /.zero?)
+             ($.default /.even?)
+             ($.default /.odd?)
+             ($.default /.co_prime?)
+             ($.default /.frac)
+             ($.default /.equivalence)
+             ($.default /.order)
+             ($.default /.enum)
+             ($.default /.interval)
+             ($.default /.addition)
+             ($.default /.multiplication)
+             ($.default /.maximum)
+             ($.default /.minimum)
+             ($.default /.binary)
+             ($.default /.octal)
+             ($.default /.decimal)
+             ($.default /.hex)
+             ($.default /.hash)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/nat.lux b/stdlib/source/documentation/lux/math/number/nat.lux
new file mode 100644
index 000000000..6b0ac7ea9
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/nat.lux
@@ -0,0 +1,82 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(template [<name> <documentation>]
+  [(documentation: <name>
+     <documentation>
+     [(<name> parameter subject)])]
+
+  [/.= "Nat(ural) equivalence."]
+  [/.+ "Nat(ural) addition."]
+  [/.- "Nat(ural) substraction."]
+  [/.< "Nat(ural) less-than."]
+  [/.<= "Nat(ural) less-than or equal."]
+  [/.> "Nat(ural) greater-than."]
+  [/.>= "Nat(ural) greater-than or equal."]
+  [/.* "Nat(ural) multiplication."]
+  [/./ "Nat(ural) division."]
+  [/./% "Nat(ural) [division remainder]."]
+  [/.% "Nat(ural) remainder."]
+  )
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> left right)])]
+
+  [/.min "Nat(ural) minimum."]
+  [/.max "Nat(ural) maximum."]
+  )
+
+(documentation: /.gcd
+  "Greatest Common Divisor.")
+
+(documentation: /.lcm
+  "Least Common Multiple.")
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..=
+             ..+
+             ..-
+             ..<
+             ..<=
+             ..>
+             ..>=
+             ..*
+             ../
+             ../%
+             ..%
+             ..min
+             ..max
+             ..gcd
+             ..lcm
+             ($.default /.co_prime?)
+             ($.default /.even?)
+             ($.default /.odd?)
+             ($.default /.frac)
+             ($.default /.equivalence)
+             ($.default /.order)
+             ($.default /.enum)
+             ($.default /.interval)
+             ($.default /.addition)
+             ($.default /.multiplication)
+             ($.default /.minimum)
+             ($.default /.maximum)
+             ($.default /.binary)
+             ($.default /.octal)
+             ($.default /.hex)
+             ($.default /.decimal)
+             ($.default /.hash)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/ratio.lux b/stdlib/source/documentation/lux/math/number/ratio.lux
new file mode 100644
index 000000000..7af023084
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/ratio.lux
@@ -0,0 +1,45 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.Ratio
+  "An unsigned ratio of numbers.")
+
+(documentation: /.ratio
+  "Rational literals."
+  [(ratio numerator denominator)]
+  ["The denominator can be omitted if it is 1."
+   (ratio numerator)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            "Rational numbers."
+            [..Ratio
+             ..ratio
+             ($.default /.nat)
+             ($.default /.=)
+             ($.default /.equivalence)
+             ($.default /.<)
+             ($.default /.<=)
+             ($.default /.>)
+             ($.default /.>=)
+             ($.default /.order)
+             ($.default /.+)
+             ($.default /.-)
+             ($.default /.*)
+             ($.default /./)
+             ($.default /.%)
+             ($.default /.reciprocal)
+             ($.default /.codec)
+             ($.default /.addition)
+             ($.default /.multiplication)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/number/rev.lux b/stdlib/source/documentation/lux/math/number/rev.lux
new file mode 100644
index 000000000..1cfce71bb
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/number/rev.lux
@@ -0,0 +1,115 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.=
+  "Rev(olution) equivalence."
+  [(= reference sample)])
+
+(documentation: /.<
+  "Rev(olution) less-than."
+  [(< reference sample)])
+
+(documentation: /.<=
+  "Rev(olution) less-than or equal."
+  [(<= reference sample)])
+
+(documentation: /.>
+  "Rev(olution) greater-than."
+  [(> reference sample)])
+
+(documentation: /.>=
+  "Rev(olution) greater-than or equal."
+  [(>= reference sample)])
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> left right)])]
+
+  [/.min "Rev(olution) minimum."]
+  [/.max "Rev(olution) maximum."]
+  )
+
+(template [<name> <doc>]
+  [(documentation: <name>
+     <doc>
+     [(<name> param subject)])]
+
+  [/.+ "Rev(olution) addition."]
+  [/.- "Rev(olution) substraction."]
+  [/.* "Rev(olution) multiplication."]
+  [/./ "Rev(olution) division."]
+  [/.% "Rev(olution) remainder."]
+  [/.ratio "Ratio between two rev(olution)s."]
+  )
+
+(template [<name>]
+  [(documentation: <name>
+     ""
+     [(<name> scale subject)])]
+
+  [/.up]
+  [/.down]
+  )
+
+(documentation: /.reciprocal
+  "Rev(olution) reciprocal of a Nat(ural)."
+  [(reciprocal numerator)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..=
+             ..<
+             ..<=
+             ..>
+             ..>=
+             ..min
+             ..max
+             ..+
+             ..-
+             ..*
+             ../
+             ..%
+             ..ratio
+             ..up
+             ..down
+             ..reciprocal
+             ($.default /./1)
+             ($.default /./2)
+             ($.default /./4)
+             ($.default /./8)
+             ($.default /./16)
+             ($.default /./32)
+             ($.default /./64)
+             ($.default /./128)
+             ($.default /./256)
+             ($.default /./512)
+             ($.default /./1024)
+             ($.default /./2048)
+             ($.default /./4096)
+             ($.default /./%)
+             ($.default /.frac)
+             ($.default /.equivalence)
+             ($.default /.hash)
+             ($.default /.order)
+             ($.default /.enum)
+             ($.default /.interval)
+             ($.default /.addition)
+             ($.default /.maximum)
+             ($.default /.minimum)
+             ($.default /.binary)
+             ($.default /.octal)
+             ($.default /.hex)
+             ($.default /.decimal)]
+            []))
diff --git a/stdlib/source/documentation/lux/math/random.lux b/stdlib/source/documentation/lux/math/random.lux
new file mode 100644
index 000000000..8dcfb98dd
--- /dev/null
+++ b/stdlib/source/documentation/lux/math/random.lux
@@ -0,0 +1,139 @@
+(.module:
+  [library
+   [lux (#- or and nat int rev)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.PRNG
+  "An abstract way to represent any PRNG.")
+
+(documentation: /.Random
+  "A producer of random values based on a PRNG.")
+
+(documentation: /.only
+  "Retries the generator until the output satisfies a predicate."
+  [(only pred gen)])
+
+(documentation: /.one
+  ""
+  [(one check random)])
+
+(documentation: /.refined
+  "Retries the generator until the output can be refined."
+  [(refined refiner gen)])
+
+(documentation: /.safe_frac
+  "A number in the interval [0.0,1.0].")
+
+(documentation: /.text
+  ""
+  [(text char_gen size)])
+
+(documentation: /.and
+  "Sequencing combinator."
+  [(and left right)])
+
+(documentation: /.or
+  "Heterogeneous alternative combinator."
+  [(or left right)])
+
+(documentation: /.either
+  "Homogeneous alternative combinator."
+  [(either left right)])
+
+(documentation: /.rec
+  "A combinator for producing recursive random generators."
+  [(rec gen)])
+
+(documentation: /.set
+  ""
+  [(set hash size value_gen)])
+
+(documentation: /.dictionary
+  ""
+  [(dictionary hash size key_gen value_gen)])
+
+(documentation: /.result
+  ""
+  [(result prng calc)])
+
+(documentation: /.prng
+  ""
+  [(prng update return)])
+
+(documentation: /.pcg_32
+  (format "An implementation of the PCG32 algorithm."
+          \n "For more information, please see: http://www.pcg-random.org/"))
+
+(documentation: /.xoroshiro_128+
+  (format "An implementation of the Xoroshiro128+ algorithm."
+          \n "For more information, please see: http://xoroshiro.di.unimi.it/"))
+
+(documentation: /.split_mix_64
+  "An implementation of the SplitMix64 algorithm.")
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            "Pseudo-random number generation (PRNG) algorithms."
+            [..PRNG
+             ..Random
+             ..only
+             ..one
+             ..refined
+             ..safe_frac
+             ..text
+             ..and
+             ..or
+             ..either
+             ..rec
+             ..set
+             ..dictionary
+             ..result
+             ..prng
+             ..pcg_32
+             ..xoroshiro_128+
+             ..split_mix_64
+             ($.default /.functor)
+             ($.default /.apply)
+             ($.default /.monad)
+             
+             ($.default /.bit)
+             ($.default /.i64)
+             ($.default /.nat)
+             ($.default /.int)
+             ($.default /.rev)
+             ($.default /.frac)
+             ($.default /.char)
+
+             ($.default /.unicode)
+             ($.default /.ascii)
+             ($.default /.ascii/alpha)
+             ($.default /.ascii/alpha_num)
+             ($.default /.ascii/numeric)
+             ($.default /.ascii/upper)
+             ($.default /.ascii/lower)
+             
+             ($.default /.ratio)
+             ($.default /.complex)
+
+             ($.default /.maybe)
+             ($.default /.list)
+             ($.default /.row)
+             ($.default /.array)
+             ($.default /.queue)
+             ($.default /.stack)
+
+             ($.default /.instant)
+             ($.default /.date)
+             ($.default /.time)
+             ($.default /.duration)
+             ($.default /.month)
+             ($.default /.day)]
+            []))
diff --git a/stdlib/source/documentation/lux/meta.lux b/stdlib/source/documentation/lux/meta.lux
new file mode 100644
index 000000000..4b6c549bf
--- /dev/null
+++ b/stdlib/source/documentation/lux/meta.lux
@@ -0,0 +1,196 @@
+(.module:
+  [library
+   [lux (#- type)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]]
+  ["." / #_
+   ["#." annotation]
+   ["#." location]])
+
+(documentation: /.result'
+  (format "Evaluates a computation that depends on Lux's compiler state."
+          \n "Also returns a (potentially modified) compiler state.")
+  [(result' lux action)])
+
+(documentation: /.result
+  "Evaluates a computation that depends on Lux's compiler state."
+  [(result lux action)])
+
+(documentation: /.either
+  "Pick whichever computation succeeds."
+  [(either left right)])
+
+(documentation: /.assertion
+  "Fails with the given message if the test is #0."
+  [(assertion message test)])
+
+(documentation: /.failure
+  "Fails with the given error message."
+  [(failure error)])
+
+(documentation: /.module
+  "Looks-up a module with the given name."
+  [(module name)])
+
+(documentation: /.current_module_name
+  "The name of the module currently being compiled, if any.")
+
+(documentation: /.current_module
+  "The module currently being compiled, if any.")
+
+(documentation: /.normal
+  (format "If given a name without a module prefix, gives it the current module's name as prefix."
+          \n "Otherwise, returns the name as-is.")
+  [(normal name)])
+
+(documentation: /.macro
+  "Looks-up a macro known by the given name."
+  [(macro full_name)])
+
+(documentation: /.seed
+  (format "The current value of a number tracked by the compiler."
+          \n "Also increases the value, so it's different next time it is seen."
+          \n "This number can be used for generating data 'randomly' during compilation."))
+
+(documentation: /.module_exists?
+  ""
+  [(module_exists? module)])
+
+(documentation: /.var_type
+  "Looks-up the type of a local variable somewhere in the environment."
+  [(var_type name)])
+
+(documentation: /.definition
+  "Looks-up a definition's whole data in the available modules (including the current one)."
+  [(definition name)])
+
+(documentation: /.export
+  (format "Looks-up a definition in the available modules (including the current one)."
+          \n "The look-up only succeeds if the definition has been exported.")
+  [(export name)])
+
+(documentation: /.definition_type
+  "Looks-up a definition's type in the available modules (including the current one)."
+  [(definition_type name)])
+
+(documentation: /.type
+  "Looks-up the type of either a local variable or a definition."
+  [(type name)])
+
+(documentation: /.type_definition
+  "Finds the value of a type definition (such as Int, Any or Lux)."
+  [(type_definition name)])
+
+(documentation: /.globals
+  "The entire list of globals in a module (including the non-exported/private ones)."
+  [(globals module)])
+
+(documentation: /.definitions
+  "The entire list of definitions in a module (including the non-exported/private ones)."
+  [(definitions module)])
+
+(documentation: /.exports
+  "All the exported definitions in a module."
+  [(exports module_name)])
+
+(documentation: /.modules
+  "All the available modules (including the current one).")
+
+(documentation: /.tags_of
+  "All the tags associated with a type definition."
+  [(tags_of type_name)])
+
+(documentation: /.location
+  "The location of the current expression being analyzed.")
+
+(documentation: /.expected_type
+  "The expected type of the current expression being analyzed.")
+
+(documentation: /.imported_modules
+  "All the modules imported by a specified module."
+  [(imported_modules module_name)])
+
+(documentation: /.imported_by?
+  ""
+  [(imported_by? import module)])
+
+(documentation: /.imported?
+  "Checks if the given module has been imported by the current module."
+  [(imported? import)])
+
+(documentation: /.tag
+  "Given a tag, finds out what is its index, its related tag-list and its associated type."
+  [(tag tag_name)])
+
+(documentation: /.tag_lists
+  "All the tag-lists defined in a module, with their associated types."
+  [(tag_lists module)])
+
+(documentation: /.locals
+  "All the local variables currently in scope, separated in different scopes.")
+
+(documentation: /.de_aliased
+  "Given an aliased definition's name, returns the original definition being referenced."
+  [(de_aliased def_name)])
+
+(documentation: /.compiler_state
+  "Obtains the current state of the compiler.")
+
+(documentation: /.type_context
+  "The current type-checking context.")
+
+(documentation: /.eval
+  ""
+  [(eval type code)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            "Functions for extracting information from the state of the compiler."
+            [..result'
+             ..result
+             ..either
+             ..assertion
+             ..failure
+             ..module
+             ..current_module_name
+             ..current_module
+             ..normal
+             ..macro
+             ..seed
+             ..module_exists?
+             ..var_type
+             ..definition
+             ..export
+             ..definition_type
+             ..type
+             ..type_definition
+             ..globals
+             ..definitions
+             ..exports
+             ..modules
+             ..tags_of
+             ..location
+             ..expected_type
+             ..imported_modules
+             ..imported_by?
+             ..imported?
+             ..tag
+             ..tag_lists
+             ..locals
+             ..de_aliased
+             ..compiler_state
+             ..type_context
+             ..eval
+             ($.default /.functor)
+             ($.default /.apply)
+             ($.default /.monad)
+             ($.default /.lifted)]
+            [/annotation.documentation
+             /location.documentation]))
diff --git a/stdlib/source/documentation/lux/meta/annotation.lux b/stdlib/source/documentation/lux/meta/annotation.lux
new file mode 100644
index 000000000..42582dad5
--- /dev/null
+++ b/stdlib/source/documentation/lux/meta/annotation.lux
@@ -0,0 +1,56 @@
+(.module:
+  [library
+   [lux (#- nat int rev)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(template [<name>]
+  [(documentation: <name>
+     ""
+     [(<name> tag ann)])]
+
+  [/.value]
+  [/.bit]
+  [/.nat]
+  [/.int]
+  [/.rev]
+  [/.frac]
+  [/.text]
+  [/.identifier]
+  [/.tag]
+  [/.form]
+  [/.tuple]
+  [/.record]
+  )
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            "Machinary for querying annotations on modules and definitions."
+            [..value
+             ..bit
+             ..nat
+             ..int
+             ..rev
+             ..frac
+             ..text
+             ..identifier
+             ..tag
+             ..form
+             ..tuple
+             ..record
+             ($.default /.Annotation)
+             ($.default /.documentation)
+             ($.default /.flagged?)
+             ($.default /.implementation?)
+             ($.default /.recursive_type?)
+             ($.default /.interface?)
+             ($.default /.function_arguments)
+             ($.default /.type_arguments)]
+            []))
diff --git a/stdlib/source/documentation/lux/meta/location.lux b/stdlib/source/documentation/lux/meta/location.lux
new file mode 100644
index 000000000..6a32244b2
--- /dev/null
+++ b/stdlib/source/documentation/lux/meta/location.lux
@@ -0,0 +1,30 @@
+(.module:
+  [library
+   [lux (#- private)
+    ["$" documentation (#+ documentation:)]
+    [data
+     ["." text (#+ \n)
+      ["%" format (#+ format)]]]
+    [macro
+     ["." template]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.here
+  "The Location of the current form."
+  [(here)])
+
+(documentation: /.with
+  ""
+  [(with location error)])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..here
+             ..with
+             ($.default /.equivalence)
+             ($.default /.dummy)
+             ($.default /.format)]
+            []))
diff --git a/stdlib/source/documentation/lux/static.lux b/stdlib/source/documentation/lux/static.lux
new file mode 100644
index 000000000..654409252
--- /dev/null
+++ b/stdlib/source/documentation/lux/static.lux
@@ -0,0 +1,70 @@
+(.module:
+  [library
+   [lux (#- nat int rev)
+    ["$" documentation (#+ documentation:)]
+    [data
+     [text
+      ["%" format (#+ format)]]
+     [collection
+      ["." list]]]]]
+  [\\library
+   ["." /]])
+
+(template [<name> <type>]
+  [(documentation: <name>
+     ""
+     [(<name>
+       (: <type>
+          (value generating expression)))])]
+
+  [/.nat .Nat]
+  [/.int .Int]
+  [/.rev .Rev]
+  [/.frac .Frac]
+  [/.text .Text]
+  )
+
+(documentation: /.literal
+  ""
+  [(/.literal
+    (: (-> ??? Code)
+       format)
+    (: ???
+       (value generating expression)))])
+
+(template [<name> <type>]
+  [(documentation: <name>
+     ""
+     [(: <type>
+         (<name>))])]
+
+  [/.random_nat .Nat]
+  [/.random_int .Int]
+  [/.random_rev .Rev]
+  [/.random_frac .Frac]
+  )
+
+(documentation: /.random
+  ""
+  [(/.random
+    (: (-> ??? Code)
+       format)
+    (: (Random ???)
+       (random data generator)))])
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..nat
+             ..int
+             ..rev
+             ..frac
+             ..text
+             ..literal
+             ..random_nat
+             ..random_int
+             ..random_rev
+             ..random_frac
+             ..random]
+            []))
diff --git a/stdlib/source/documentation/lux/target.lux b/stdlib/source/documentation/lux/target.lux
new file mode 100644
index 000000000..9e408ae0f
--- /dev/null
+++ b/stdlib/source/documentation/lux/target.lux
@@ -0,0 +1,32 @@
+(.module:
+  [library
+   [lux (#- char)
+    ["$" documentation (#+ documentation:)]
+    [data
+     [text (#+ \n)
+      ["%" format (#+ format)]]
+     [collection
+      ["." list]]]]]
+  [\\library
+   ["." /]])
+
+(documentation: /.Target
+  (format "The name/ID of a platform targetted by a Lux compiler."
+          \n "This information can be used to generate code targetting specific platforms, and to make programs cross-platform."))
+
+(.def: .public documentation
+  (.List $.Module)
+  ($.module /._
+            ""
+            [..Target
+             ($.default /.old)
+             ($.default /.js)
+             ($.default /.jvm)
+             ($.default /.lua)
+             ($.default /.python)
+             ($.default /.ruby)
+             ($.default /.common_lisp)
+             ($.default /.php)
+             ($.default /.r)
+             ($.default /.scheme)]
+            []))
diff --git a/stdlib/source/library/lux.lux b/stdlib/source/library/lux.lux
index 986378ad7..ffe7daf46 100644
--- a/stdlib/source/library/lux.lux
+++ b/stdlib/source/library/lux.lux
@@ -1143,7 +1143,7 @@
         (#Function Nat Code)
         (form$ (#Item (tag$ ["library/lux" "Parameter"]) (#Item (nat$ idx) #End))))
 
-(def:'' .private (list\fold f init xs)
+(def:'' .private (list\mix f init xs)
         #End
         ... (All [a b] (-> (-> b a a) a (List b) a))
         (#UnivQ #End (#UnivQ #End (#Function (#Function (#Parameter 1)
@@ -1156,14 +1156,14 @@
           init
 
           (#Item x xs')
-          (list\fold f (f x init) xs')}
+          (list\mix f (f x init) xs')}
          xs))
 
 (def:'' .private (list\size list)
         #End
         (#UnivQ #End
                 (#Function ($' List (#Parameter 1)) Nat))
-        (list\fold (function'' [_ acc] ("lux i64 +" 1 acc)) 0 list))
+        (list\mix (function'' [_ acc] ("lux i64 +" 1 acc)) 0 list))
 
 (macro:' .public (All tokens)
          (#Item [(tag$ ["library/lux" "doc"])
@@ -1184,15 +1184,15 @@
                 ({(#Item [_ (#Tuple args)] (#Item body #End))
                   (quantified_args_parser args
                                           (function'' [names]
-                                                      (let'' body' (list\fold ("lux type check" (#Function Text (#Function Code Code))
-                                                                               (function'' [name' body']
-                                                                                           (form$ (#Item (tag$ ["library/lux" "UnivQ"])
-                                                                                                         (#Item (tag$ ["library/lux" "End"])
-                                                                                                                (#Item (with_replacements (#Item [name' (type_parameter 1)] #End)
-                                                                                                                         (nested_quantification body'))
-                                                                                                                       #End))))))
-                                                                              body
-                                                                              names)
+                                                      (let'' body' (list\mix ("lux type check" (#Function Text (#Function Code Code))
+                                                                              (function'' [name' body']
+                                                                                          (form$ (#Item (tag$ ["library/lux" "UnivQ"])
+                                                                                                        (#Item (tag$ ["library/lux" "End"])
+                                                                                                               (#Item (with_replacements (#Item [name' (type_parameter 1)] #End)
+                                                                                                                        (nested_quantification body'))
+                                                                                                                      #End))))))
+                                                                             body
+                                                                             names)
                                                              (in_meta (#Item ({[#1 _]
                                                                                body'
 
@@ -1229,15 +1229,15 @@
                 ({(#Item [_ (#Tuple args)] (#Item body #End))
                   (quantified_args_parser args
                                           (function'' [names]
-                                                      (let'' body' (list\fold ("lux type check" (#Function Text (#Function Code Code))
-                                                                               (function'' [name' body']
-                                                                                           (form$ (#Item (tag$ ["library/lux" "ExQ"])
-                                                                                                         (#Item (tag$ ["library/lux" "End"])
-                                                                                                                (#Item (with_replacements (#Item [name' (type_parameter 1)] #End)
-                                                                                                                         (nested_quantification body'))
-                                                                                                                       #End))))))
-                                                                              body
-                                                                              names)
+                                                      (let'' body' (list\mix ("lux type check" (#Function Text (#Function Code Code))
+                                                                              (function'' [name' body']
+                                                                                          (form$ (#Item (tag$ ["library/lux" "ExQ"])
+                                                                                                        (#Item (tag$ ["library/lux" "End"])
+                                                                                                               (#Item (with_replacements (#Item [name' (type_parameter 1)] #End)
+                                                                                                                        (nested_quantification body'))
+                                                                                                                      #End))))))
+                                                                             body
+                                                                             names)
                                                              (in_meta (#Item ({[#1 _]
                                                                                body'
 
@@ -1258,10 +1258,10 @@
 (def:'' .private (list\reversed list)
         #End
         (All [a] (#Function ($' List a) ($' List a)))
-        (list\fold ("lux type check" (All [a] (#Function a (#Function ($' List a) ($' List a))))
-                    (function'' [head tail] (#Item head tail)))
-                   #End
-                   list))
+        (list\mix ("lux type check" (All [a] (#Function a (#Function ($' List a) ($' List a))))
+                   (function'' [head tail] (#Item head tail)))
+                  #End
+                  list))
 
 (macro:' .public (-> tokens)
          (#Item [(tag$ ["library/lux" "doc"])
@@ -1272,10 +1272,10 @@
                           "... This is the type of a function that takes 2 Ints and returns an Int.")))]
                 #End)
          ({(#Item output inputs)
-           (in_meta (#Item (list\fold ("lux type check" (#Function Code (#Function Code Code))
-                                       (function'' [i o] (form$ (#Item (tag$ ["library/lux" "Function"]) (#Item i (#Item o #End))))))
-                                      output
-                                      inputs)
+           (in_meta (#Item (list\mix ("lux type check" (#Function Code (#Function Code Code))
+                                      (function'' [i o] (form$ (#Item (tag$ ["library/lux" "Function"]) (#Item i (#Item o #End))))))
+                                     output
+                                     inputs)
                            #End))
            
            _
@@ -1288,12 +1288,12 @@
                          ("lux text concat" "... List-construction macro." __paragraph)
                          "(list +1 +2 +3)"))]
                 #End)
-         (in_meta (#Item (list\fold (function'' [head tail]
-                                                (form$ (#Item (tag$ ["library/lux" "Item"])
-                                                              (#Item (tuple$ (#Item [head (#Item [tail #End])]))
-                                                                     #End))))
-                                    (tag$ ["library/lux" "End"])
-                                    (list\reversed xs))
+         (in_meta (#Item (list\mix (function'' [head tail]
+                                               (form$ (#Item (tag$ ["library/lux" "Item"])
+                                                             (#Item (tuple$ (#Item [head (#Item [tail #End])]))
+                                                                    #End))))
+                                   (tag$ ["library/lux" "End"])
+                                   (list\reversed xs))
                          #End)))
 
 (macro:' .public (list& xs)
@@ -1305,11 +1305,11 @@
                           "(list& +1 +2 +3 (list +4 +5 +6))")))]
                 #End)
          ({(#Item last init)
-           (in_meta (list (list\fold (function'' [head tail]
-                                                 (form$ (list (tag$ ["library/lux" "Item"])
-                                                              (tuple$ (list head tail)))))
-                                     last
-                                     init)))
+           (in_meta (list (list\mix (function'' [head tail]
+                                                (form$ (list (tag$ ["library/lux" "Item"])
+                                                             (tuple$ (list head tail)))))
+                                    last
+                                    init)))
 
            _
            (failure "Wrong syntax for list&")}
@@ -1329,9 +1329,9 @@
            (in_meta (list (identifier$ ["library/lux" "Nothing"])))
 
            (#Item last prevs)
-           (in_meta (list (list\fold (function'' [left right] (form$ (list (tag$ ["library/lux" "Sum"]) left right)))
-                                     last
-                                     prevs)))}
+           (in_meta (list (list\mix (function'' [left right] (form$ (list (tag$ ["library/lux" "Sum"]) left right)))
+                                    last
+                                    prevs)))}
           (list\reversed tokens)))
 
 (macro:' .public (Tuple tokens)
@@ -1348,9 +1348,9 @@
            (in_meta (list (identifier$ ["library/lux" "Any"])))
 
            (#Item last prevs)
-           (in_meta (list (list\fold (function'' [left right] (form$ (list (tag$ ["library/lux" "Product"]) left right)))
-                                     last
-                                     prevs)))}
+           (in_meta (list (list\mix (function'' [left right] (form$ (list (tag$ ["library/lux" "Product"]) left right)))
+                                    last
+                                    prevs)))}
           (list\reversed tokens)))
 
 (macro:' .private (function' tokens)
@@ -1367,12 +1367,12 @@
                     (#Item [harg targs])
                     (in_meta (list (form$ (list (tuple$ (list (local_identifier$ name)
                                                               harg))
-                                                (list\fold (function'' [arg body']
-                                                                       (form$ (list (tuple$ (list (local_identifier$ "")
-                                                                                                  arg))
-                                                                                    body')))
-                                                           body
-                                                           (list\reversed targs))))))}
+                                                (list\mix (function'' [arg body']
+                                                                      (form$ (list (tuple$ (list (local_identifier$ "")
+                                                                                                 arg))
+                                                                                   body')))
+                                                          body
+                                                          (list\reversed targs))))))}
                    args)
 
                   _
@@ -1437,14 +1437,14 @@
 
 (macro:' .private (let' tokens)
          ({(#Item [[_ (#Tuple bindings)] (#Item [body #End])])
-           (in_meta (list (list\fold ("lux type check" (-> (Tuple Code Code) Code
-                                                           Code)
-                                      (function' [binding body]
-                                                 ({[label value]
-                                                   (form$ (list (record$ (list [label body])) value))}
-                                                  binding)))
-                                     body
-                                     (list\reversed (pairs bindings)))))
+           (in_meta (list (list\mix ("lux type check" (-> (Tuple Code Code) Code
+                                                          Code)
+                                     (function' [binding body]
+                                                ({[label value]
+                                                  (form$ (list (record$ (list [label body])) value))}
+                                                 binding)))
+                                    body
+                                    (list\reversed (pairs bindings)))))
 
            _
            (failure "Wrong syntax for let'")}
@@ -1518,7 +1518,7 @@
                 #End)
          ({(#Item op tokens')
            ({(#Item first nexts)
-             (in_meta (list (list\fold (function\flipped (right_associativity op)) first nexts)))
+             (in_meta (list (list\mix (function\flipped (right_associativity op)) first nexts)))
 
              _
              (failure "Wrong syntax for _$")}
@@ -1540,7 +1540,7 @@
                 #End)
          ({(#Item op tokens')
            ({(#Item last prevs)
-             (in_meta (list (list\fold (right_associativity op) last prevs)))
+             (in_meta (list (list\mix (right_associativity op) last prevs)))
 
              _
              (failure "Wrong syntax for $_")}
@@ -1554,7 +1554,7 @@
 ...   (: (All [a] (-> a (m a)))
 ...      in)
 ...   (: (All [a b] (-> (-> a (m b)) (m a) (m b)))
-...      bind))
+...      then))
 ("lux def type tagged" Monad
  (#Named ["library/lux" "Monad"]
          (All [m]
@@ -1563,7 +1563,7 @@
                                  ($' m a)
                                  ($' m b))))))
  (record$ (list))
- ["in" "bind"]
+ ["in" "then"]
  #0)
 
 (def:''' .private maybe_monad
@@ -1572,7 +1572,7 @@
          {#in
           (function' [x] (#Some x))
           
-          #bind
+          #then
           (function' [f ma]
                      ({#None     #None
                        (#Some a) (f a)}
@@ -1586,7 +1586,7 @@
                      (function' [state]
                                 (#Right state x)))
           
-          #bind
+          #then
           (function' [f ma]
                      (function' [state]
                                 ({(#Left msg)
@@ -1599,29 +1599,29 @@
 (macro:' .private (do tokens)
          ({(#Item monad (#Item [_ (#Tuple bindings)] (#Item body #End)))
            (let' [g!in (local_identifier$ "in")
-                  g!bind (local_identifier$ " bind ")
-                  body' (list\fold ("lux type check" (-> (Tuple Code Code) Code Code)
-                                    (function' [binding body']
-                                               (let' [[var value] binding]
-                                                     ({[_ (#Identifier [module short])]
-                                                       ({""
-                                                         (form$ (list g!bind
-                                                                      (form$ (list (tuple$ (list (local_identifier$ "") var)) body'))
-                                                                      value))
-
-                                                         _
-                                                         (form$ (list var value body'))}
-                                                        module)
-                                                       
-
-                                                       _
-                                                       (form$ (list g!bind
-                                                                    (form$ (list (tuple$ (list (local_identifier$ "") var)) body'))
-                                                                    value))}
-                                                      var))))
-                                   body
-                                   (list\reversed (pairs bindings)))]
-                 (in_meta (list (form$ (list (record$ (list [(record$ (list [(tag$ ["library/lux" "in"]) g!in] [(tag$ ["library/lux" "bind"]) g!bind]))
+                  g!then (local_identifier$ " then ")
+                  body' (list\mix ("lux type check" (-> (Tuple Code Code) Code Code)
+                                   (function' [binding body']
+                                              (let' [[var value] binding]
+                                                    ({[_ (#Identifier [module short])]
+                                                      ({""
+                                                        (form$ (list g!then
+                                                                     (form$ (list (tuple$ (list (local_identifier$ "") var)) body'))
+                                                                     value))
+
+                                                        _
+                                                        (form$ (list var value body'))}
+                                                       module)
+                                                      
+
+                                                      _
+                                                      (form$ (list g!then
+                                                                   (form$ (list (tuple$ (list (local_identifier$ "") var)) body'))
+                                                                   value))}
+                                                     var))))
+                                  body
+                                  (list\reversed (pairs bindings)))]
+                 (in_meta (list (form$ (list (record$ (list [(record$ (list [(tag$ ["library/lux" "in"]) g!in] [(tag$ ["library/lux" "then"]) g!then]))
                                                              body']))
                                              monad)))))
 
@@ -1638,7 +1638,7 @@
                (-> a ($' m b))
                ($' List a)
                ($' m ($' List b))))
-         (let' [{#in in #bind _} m]
+         (let' [{#in in #then _} m]
                ({#End
                  (in #End)
                  
@@ -1649,7 +1649,7 @@
                    (in (#Item y ys)))}
                 xs)))
 
-(def:''' .private (monad\fold m f y xs)
+(def:''' .private (monad\mix m f y xs)
          #End
          ... (All [m a b]
          ...   (-> (Monad m) (-> a b (m b)) b (List a) (m b)))
@@ -1659,14 +1659,14 @@
                b
                ($' List a)
                ($' m b)))
-         (let' [{#in in #bind _} m]
+         (let' [{#in in #then _} m]
                ({#End
                  (in y)
                  
                  (#Item x xs')
                  (do m
                    [y' (f x y)]
-                   (monad\fold m f y' xs'))}
+                   (monad\mix m f y' xs'))}
                 xs)))
 
 (macro:' .public (if tokens)
@@ -1707,7 +1707,7 @@
          (-> Text Text Text)
          ("lux text concat" x y))
 
-(def:''' .private (name\encode full_name)
+(def:''' .private (name\encoded full_name)
          #End
          (-> Name Text)
          (let' [[module name] full_name]
@@ -1733,11 +1733,11 @@
                     constant)
 
                    #None
-                   (#Left ($_ text\compose "Unknown definition: " (name\encode full_name)))}
+                   (#Left ($_ text\compose "Unknown definition: " (name\encoded full_name)))}
                   (plist\value name definitions))
                  
                  #None
-                 (#Left ($_ text\compose "Unknown module: " module " @ " (name\encode full_name)))}
+                 (#Left ($_ text\compose "Unknown module: " module " @ " (name\encoded full_name)))}
                 (plist\value module modules))))
 
 (def:''' .private (code_list expression)
@@ -1766,21 +1766,21 @@
                           (in (code_list (form$ (list (tag$ ["library/lux" "Item"])
                                                       (tuple$ (list lastO (tag$ ["library/lux" "End"]))))))))}
                        lastI)]
-               (monad\fold meta_monad
-                           (function' [leftI rightO]
-                                      ({[_ (#Form (#Item [[_ (#Identifier ["" "~+"])] (#Item [spliced #End])]))]
-                                        (let' [g!in-module (form$ (list (text$ "lux in-module")
-                                                                        (text$ "library/lux")
-                                                                        (identifier$ ["library/lux" "list\compose"])))]
-                                              (in (form$ (list g!in-module (code_list spliced) rightO))))
-
-                                        _
-                                        (do meta_monad
-                                          [leftO (untemplated leftI)]
-                                          (in (form$ (list (tag$ ["library/lux" "Item"]) (tuple$ (list leftO rightO))))))}
-                                       leftI))
-                           lastO
-                           inits))}
+               (monad\mix meta_monad
+                          (function' [leftI rightO]
+                                     ({[_ (#Form (#Item [[_ (#Identifier ["" "~+"])] (#Item [spliced #End])]))]
+                                       (let' [g!in-module (form$ (list (text$ "lux in-module")
+                                                                       (text$ "library/lux")
+                                                                       (identifier$ ["library/lux" "list\compose"])))]
+                                             (in (form$ (list g!in-module (code_list spliced) rightO))))
+
+                                       _
+                                       (do meta_monad
+                                         [leftO (untemplated leftI)]
+                                         (in (form$ (list (tag$ ["library/lux" "Item"]) (tuple$ (list leftO rightO))))))}
+                                      leftI))
+                          lastO
+                          inits))}
             (list\reversed elems))
            #0
            (do meta_monad
@@ -1965,23 +1965,23 @@
          (list [(tag$ ["library/lux" "doc"])
                 (text$ ($_ "lux text concat"
                            "... Piping macro." __paragraph
-                           "(|> elems (list\map int\encode) (interposed '' '') (fold text\compose ''''))" __paragraph
+                           "(|> elems (list\map int\encoded) (interposed '' '') (mix text\compose ''''))" __paragraph
                            "... =>" __paragraph
-                           "(fold text\compose '''' (interposed '' '' (list\map int\encode elems)))"))])
+                           "(mix text\compose '''' (interposed '' '' (list\map int\encoded elems)))"))])
          ({(#Item [init apps])
-           (in_meta (list (list\fold ("lux type check" (-> Code Code Code)
-                                      (function' [app acc]
-                                                 ({[_ (#Tuple parts)]
-                                                   (tuple$ (list\compose parts (list acc)))
+           (in_meta (list (list\mix ("lux type check" (-> Code Code Code)
+                                     (function' [app acc]
+                                                ({[_ (#Tuple parts)]
+                                                  (tuple$ (list\compose parts (list acc)))
 
-                                                   [_ (#Form parts)]
-                                                   (form$ (list\compose parts (list acc)))
+                                                  [_ (#Form parts)]
+                                                  (form$ (list\compose parts (list acc)))
 
-                                                   _
-                                                   (` ((~ app) (~ acc)))}
-                                                  app)))
-                                     init
-                                     apps)))
+                                                  _
+                                                  (` ((~ app) (~ acc)))}
+                                                 app)))
+                                    init
+                                    apps)))
 
            _
            (failure "Wrong syntax for |>")}
@@ -1991,23 +1991,23 @@
          (list [(tag$ ["library/lux" "doc"])
                 (text$ ($_ "lux text concat"
                            "... Reverse piping macro." __paragraph
-                           "(<| (fold text\compose '''') (interposed '' '') (list\map int\encode) elems)" __paragraph
+                           "(<| (mix text\compose '''') (interposed '' '') (list\map int\encoded) elems)" __paragraph
                            "... =>" __paragraph
-                           "(fold text\compose '''' (interposed '' '' (list\map int\encode elems)))"))])
+                           "(mix text\compose '''' (interposed '' '' (list\map int\encoded elems)))"))])
          ({(#Item [init apps])
-           (in_meta (list (list\fold ("lux type check" (-> Code Code Code)
-                                      (function' [app acc]
-                                                 ({[_ (#Tuple parts)]
-                                                   (tuple$ (list\compose parts (list acc)))
+           (in_meta (list (list\mix ("lux type check" (-> Code Code Code)
+                                     (function' [app acc]
+                                                ({[_ (#Tuple parts)]
+                                                  (tuple$ (list\compose parts (list acc)))
 
-                                                   [_ (#Form parts)]
-                                                   (form$ (list\compose parts (list acc)))
+                                                  [_ (#Form parts)]
+                                                  (form$ (list\compose parts (list acc)))
 
-                                                   _
-                                                   (` ((~ app) (~ acc)))}
-                                                  app)))
-                                     init
-                                     apps)))
+                                                  _
+                                                  (` ((~ app) (~ acc)))}
+                                                 app)))
+                                    init
+                                    apps)))
 
            _
            (failure "Wrong syntax for <|")}
@@ -2092,7 +2092,7 @@
          #End
          (All [a]
            (-> (-> a Bit) ($' List a) Bit))
-         (list\fold (function' [_2 _1] (if _1 (p _2) #0)) #1 xs))
+         (list\mix (function' [_2 _1] (if _1 (p _2) #0)) #1 xs))
 
 (def:''' .private (high_bits value)
          (list)
@@ -2133,7 +2133,7 @@
          #End
          (All [a]
            (-> ($' List ($' List a)) ($' List a)))
-         (list\fold list\compose #End (list\reversed xs)))
+         (list\mix list\compose #End (list\reversed xs)))
 
 (macro:' .public (template tokens)
          (list [(tag$ ["library/lux" "doc"])
@@ -2199,7 +2199,7 @@
            left
            right))
 
-(def:''' .private (bit\encode x)
+(def:''' .private (bit\encoded x)
          #End
          (-> Bit Text)
          (if x "#1" "#0"))
@@ -2214,7 +2214,7 @@
            _ ("lux io error" "@digit::format Undefined behavior.")}
           digit))
 
-(def:''' .private (nat\encode value)
+(def:''' .private (nat\encoded value)
          #End
          (-> Nat Text)
          ({0
@@ -2238,7 +2238,7 @@
            ("lux i64 *" -1 value)
            value))
 
-(def:''' .private (int\encode value)
+(def:''' .private (int\encoded value)
          #End
          (-> Int Text)
          (if ("lux i64 =" +0 value)
@@ -2256,7 +2256,7 @@
                   (|> value ("lux i64 /" +10) int\abs)
                   (|> value ("lux i64 %" +10) int\abs ("lux type as" Nat) digit::format)))))
 
-(def:''' .private (frac\encode x)
+(def:''' .private (frac\encoded x)
          #End
          (-> Frac Text)
          ("lux f64 encode" x))
@@ -2465,10 +2465,10 @@
            expression
 
            [_ (#Form (#Item type_fn args))]
-           (list\fold ("lux type check" (-> Code Code Code)
-                       (function' [arg type_fn] (` (#.Apply (~ arg) (~ type_fn)))))
-                      (normal_type type_fn)
-                      (list\map normal_type args))
+           (list\mix ("lux type check" (-> Code Code Code)
+                      (function' [arg type_fn] (` (#.Apply (~ arg) (~ type_fn)))))
+                     (normal_type type_fn)
+                     (list\map normal_type args))
            
            _
            type}
@@ -2601,7 +2601,7 @@
                     #seed   ("lux i64 +" 1 seed) #expected expected
                     #location location #extensions extensions
                     #scope_type_vars scope_type_vars #eval _eval}
-                   (local_identifier$ ($_ text\compose "__gensym__" prefix (nat\encode seed))))}
+                   (local_identifier$ ($_ text\compose "__gensym__" prefix (nat\encoded seed))))}
           state))
 
 (macro:' .public (Rec tokens)
@@ -2631,11 +2631,11 @@
                            "''YOLO'')"))])
          ({(#Item value actions)
            (let' [dummy (local_identifier$ "")]
-                 (in_meta (list (list\fold ("lux type check" (-> Code Code Code)
-                                            (function' [pre post] (` ({(~ dummy) (~ post)}
-                                                                      (~ pre)))))
-                                           value
-                                           actions))))
+                 (in_meta (list (list\mix ("lux type check" (-> Code Code Code)
+                                           (function' [pre post] (` ({(~ dummy) (~ post)}
+                                                                     (~ pre)))))
+                                          value
+                                          actions))))
 
            _
            (failure "Wrong syntax for exec")}
@@ -2681,29 +2681,29 @@
                  (failure "Wrong syntax for def'")}
                 parts)))
 
-(def:' .private (text\encode original)
+(def:' .private (text\encoded original)
        (-> Text Text)
        ($_ text\compose ..double_quote original ..double_quote))
 
-(def:' .private (code\encode code)
+(def:' .private (code\encoded code)
        (-> Code Text)
        ({[_ (#Bit value)]
-         (bit\encode value)
+         (bit\encoded value)
 
          [_ (#Nat value)]
-         (nat\encode value)
+         (nat\encoded value)
 
          [_ (#Int value)]
-         (int\encode value)
+         (int\encoded value)
 
          [_ (#Rev value)]
-         ("lux io error" "@code\encode Undefined behavior.")
+         ("lux io error" "@code\encoded Undefined behavior.")
          
          [_ (#Frac value)]
-         (frac\encode value)
+         (frac\encoded value)
 
          [_ (#Text value)]
-         (text\encode value)
+         (text\encoded value)
          
          [_ (#Identifier [module name])]
          (if (text\= "" module)
@@ -2717,25 +2717,25 @@
          
          [_ (#Form xs)]
          ($_ text\compose "(" (|> xs
-                                  (list\map code\encode)
+                                  (list\map code\encoded)
                                   (list\interposed " ")
                                   list\reversed
-                                  (list\fold text\compose "")) ")")
+                                  (list\mix text\compose "")) ")")
          
          [_ (#Tuple xs)]
          ($_ text\compose "[" (|> xs
-                                  (list\map code\encode)
+                                  (list\map code\encoded)
                                   (list\interposed " ")
                                   list\reversed
-                                  (list\fold text\compose "")) "]")
+                                  (list\mix text\compose "")) "]")
          
          [_ (#Record kvs)]
          ($_ text\compose "{" (|> kvs
-                                  (list\map (function' [kv] ({[k v] ($_ text\compose (code\encode k) " " (code\encode v))}
+                                  (list\map (function' [kv] ({[k v] ($_ text\compose (code\encoded k) " " (code\encoded v))}
                                                              kv)))
                                   (list\interposed " ")
                                   list\reversed
-                                  (list\fold text\compose "")) "}")}
+                                  (list\mix text\compose "")) "}")}
         code))
 
 (def:' .private (expander branches)
@@ -2765,10 +2765,10 @@
 
          _
          (failure ($_ text\compose "'lux.case' expects an even number of tokens: " (|> branches
-                                                                                       (list\map code\encode)
+                                                                                       (list\map code\encoded)
                                                                                        (list\interposed " ")
                                                                                        list\reversed
-                                                                                       (list\fold text\compose ""))))}
+                                                                                       (list\mix text\compose ""))))}
         branches))
 
 (macro:' .public (case tokens)
@@ -2865,13 +2865,13 @@
            (^ (list [_ (#Tuple bindings)] body))
            (if (multiple? 2 (list\size bindings))
              (|> bindings pairs list\reversed
-                 (list\fold (: (-> [Code Code] Code Code)
-                               (function' [lr body']
-                                          (let' [[l r] lr]
-                                                (if (identifier? l)
-                                                  (` ({(~ l) (~ body')} (~ r)))
-                                                  (` (case (~ r) (~ l) (~ body')))))))
-                            body)
+                 (list\mix (: (-> [Code Code] Code Code)
+                              (function' [lr body']
+                                         (let' [[l r] lr]
+                                               (if (identifier? l)
+                                                 (` ({(~ l) (~ body')} (~ r)))
+                                                 (` (case (~ r) (~ l) (~ body')))))))
+                           body)
                  list
                  in_meta)
              (failure "let requires an even number of parts"))
@@ -2906,7 +2906,7 @@
                                                  (` ([(~ g!name) (~ g!blank)]
                                                      (.case (~ g!blank) (~ arg) (~ body'))))))))]
              (in_meta (list (nest (..local_identifier$ g!name) head
-                                  (list\fold (nest g!blank) body (list\reversed tail))))))
+                                  (list\mix (nest g!blank) body (list\reversed tail))))))
 
            #None
            (failure "Wrong syntax for function")))
@@ -2971,13 +2971,13 @@
          _
          (` (#.Item [[(~ location_code) (#.Tag ["library/lux" "func_args"])]
                      [(~ location_code) (#.Tuple (.list (~+ (list\map (function (_ parameter)
-                                                                        (` [(~ location_code) (#.Text (~ (text$ (code\encode parameter))))]))
+                                                                        (` [(~ location_code) (#.Text (~ (text$ (code\encoded parameter))))]))
                                                                       parameters))))]]
                     (~ meta)))))
 
 (def:' .private (with_type_args args)
        (-> (List Code) Code)
-       (` {#.type_args [(~+ (list\map (function (_ arg) (text$ (code\encode arg)))
+       (` {#.type_args [(~+ (list\map (function (_ arg) (text$ (code\encoded arg)))
                                       args))]}))
 
 (def:' .private (endP tokens)
@@ -3195,7 +3195,7 @@
   (-> Code Code Code)
   (case addition
     [location (#Record pairs)]
-    (list\fold with_definition_annotation base pairs)
+    (list\mix with_definition_annotation base pairs)
     
     _
     base))
@@ -3295,10 +3295,10 @@
      {#.doc <documentation>}
      (case (list\reversed tokens)
        (^ (list& last init))
-       (in_meta (list (list\fold (: (-> Code Code Code)
-                                    (function (_ pre post) (` <form>)))
-                                 last
-                                 init)))
+       (in_meta (list (list\mix (: (-> Code Code Code)
+                                   (function (_ pre post) (` <form>)))
+                                last
+                                init)))
        
        _
        (failure <message>)))]
@@ -3508,7 +3508,7 @@
       (in_meta output)
 
       _
-      (failure (text\compose "Unknown tag: " (name\encode [module name]))))))
+      (failure (text\compose "Unknown tag: " (name\encoded [module name]))))))
 
 (def: (record_slots type)
   (-> Type (Meta (Maybe [(List Name) (List Type)])))
@@ -3610,10 +3610,10 @@
     ""
     
     (#Item head tail)
-    (list\fold (function (_ right left)
-                 ($_ text\compose left separator right))
-               head
-               tail)))
+    (list\mix (function (_ right left)
+                ($_ text\compose left separator right))
+              head
+              tail)))
 
 (def: (remainderP tokens)
   (-> (List Code) (Maybe (List Code)))
@@ -4150,7 +4150,7 @@
                                   [current_module current_module_name]
                                   (failure ($_ text\compose
                                                "Wrong syntax for import @ " current_module
-                                               ..\n (code\encode token)))))))
+                                               ..\n (code\encoded token)))))))
                          imports)]
     (in (list\joined imports'))))
 
@@ -4181,10 +4181,10 @@
       
       #None
       (#Left ($_ text\compose
-                 "Unknown module: " (text\encode module) ..\n
+                 "Unknown module: " (text\encoded module) ..\n
                  "Current module: " (case current_module
                                       (#Some current_module)
-                                      (text\encode current_module)
+                                      (text\encoded current_module)
 
                                       #None
                                       "???") ..\n
@@ -4192,7 +4192,7 @@
                                                             (list\map (function (_ [name module])
                                                                         (text$ name)))
                                                             tuple$
-                                                            code\encode))))
+                                                            code\encoded))))
     ))
 
 (def: (only p xs)
@@ -4208,11 +4208,11 @@
 
 (def: (is_member? cases name)
   (-> (List Text) Text Bit)
-  (let [output (list\fold (function (_ case prev)
-                            (or prev
-                                (text\= case name)))
-                          #0
-                          cases)]
+  (let [output (list\mix (function (_ case prev)
+                           (or prev
+                               (text\= case name)))
+                         #0
+                         cases)]
     output))
 
 (def: (on_either f x1 x2)
@@ -4278,12 +4278,12 @@
          #scope_type_vars scope_type_vars #eval _eval} state]
     (case (plist\value v_module modules)
       #None
-      (#Left (text\compose "Unknown definition: " (name\encode name)))
+      (#Left (text\compose "Unknown definition: " (name\encoded name)))
 
       (#Some {#definitions definitions #module_hash _ #module_aliases _ #imports _ #tags tags #types types #module_annotations _ #module_state _})
       (case (plist\value v_name definitions)
         #None
-        (#Left (text\compose "Unknown definition: " (name\encode name)))
+        (#Left (text\compose "Unknown definition: " (name\encoded name)))
 
         (#Some definition)
         (case definition
@@ -4321,13 +4321,13 @@
                        (#Right [compiler struct_type])
 
                        _
-                       (#Left ($_ text\compose "Unknown var: " (name\encode full_name)))))
+                       (#Left ($_ text\compose "Unknown var: " (name\encoded full_name)))))
                    (case (definition_type full_name compiler)
                      (#Some struct_type)
                      (#Right [compiler struct_type])
 
                      _
-                     (#Left ($_ text\compose "Unknown var: " (name\encode full_name)))))]
+                     (#Left ($_ text\compose "Unknown var: " (name\encoded full_name)))))]
         (case temp
           (#Right [compiler (#Var type_id)])
           (let [{#info _ #source _ #current_module _ #modules _
@@ -4360,7 +4360,7 @@
     _
     (list)))
 
-(def: (type\encode type)
+(def: (type\encoded type)
   (-> Type Text)
   (case type
     (#Primitive name params)
@@ -4369,41 +4369,41 @@
       name
 
       _
-      ($_ text\compose "(" name " " (|> params (list\map type\encode) (list\interposed " ") list\reversed (list\fold text\compose "")) ")"))
+      ($_ text\compose "(" name " " (|> params (list\map type\encoded) (list\interposed " ") list\reversed (list\mix text\compose "")) ")"))
 
     (#Sum _)
-    ($_ text\compose "(Or " (|> (flat_variant type) (list\map type\encode) (list\interposed " ") list\reversed (list\fold text\compose "")) ")")
+    ($_ text\compose "(Or " (|> (flat_variant type) (list\map type\encoded) (list\interposed " ") list\reversed (list\mix text\compose "")) ")")
     
     (#Product _)
-    ($_ text\compose "[" (|> (flat_tuple type) (list\map type\encode) (list\interposed " ") list\reversed (list\fold text\compose "")) "]")
+    ($_ text\compose "[" (|> (flat_tuple type) (list\map type\encoded) (list\interposed " ") list\reversed (list\mix text\compose "")) "]")
 
     (#Function _)
-    ($_ text\compose "(-> " (|> (flat_lambda type) (list\map type\encode) (list\interposed " ") list\reversed (list\fold text\compose "")) ")")
+    ($_ text\compose "(-> " (|> (flat_lambda type) (list\map type\encoded) (list\interposed " ") list\reversed (list\mix text\compose "")) ")")
 
     (#Parameter id)
-    (nat\encode id)
+    (nat\encoded id)
     
     (#Var id)
-    ($_ text\compose "⌈v:" (nat\encode id) "⌋")
+    ($_ text\compose "⌈v:" (nat\encoded id) "⌋")
     
     (#Ex id)
-    ($_ text\compose "⟨e:" (nat\encode id) "⟩")
+    ($_ text\compose "⟨e:" (nat\encoded id) "⟩")
     
     (#UnivQ env body)
-    ($_ text\compose "(All " (type\encode body) ")")
+    ($_ text\compose "(All " (type\encoded body) ")")
 
     (#ExQ env body)
-    ($_ text\compose "(Ex " (type\encode body) ")")
+    ($_ text\compose "(Ex " (type\encoded body) ")")
     
     (#Apply _)
     (let [[func args] (flat_application type)]
       ($_ text\compose
-          "(" (type\encode func) " "
-          (|> args (list\map type\encode) (list\interposed " ") list\reversed (list\fold text\compose ""))
+          "(" (type\encoded func) " "
+          (|> args (list\map type\encoded) (list\interposed " ") list\reversed (list\mix text\compose ""))
           ")"))
     
     (#Named name _)
-    (name\encode name)
+    (name\encoded name)
     ))
 
 (macro: .public (^open tokens)
@@ -4425,7 +4425,7 @@
        struct_evidence (record_slots init_type)]
       (case struct_evidence
         #None
-        (failure (text\compose "Can only 'open' structs: " (type\encode init_type)))
+        (failure (text\compose "Can only 'open' structs: " (type\encoded init_type)))
 
         (#Some tags&members)
         (do meta_monad
@@ -4436,20 +4436,20 @@
                                                   tags)
                                  pattern (tuple$ (list\map identifier$ locals))]
                              (do meta_monad
-                               [enhanced_target (monad\fold meta_monad
-                                                            (function (_ [m_local m_type] enhanced_target)
-                                                              (do meta_monad
-                                                                [m_implementation (record_slots m_type)]
-                                                                (case m_implementation
-                                                                  (#Some m_tags&members)
-                                                                  (recur m_local
-                                                                         m_tags&members
-                                                                         enhanced_target)
-
-                                                                  #None
-                                                                  (in enhanced_target))))
-                                                            target
-                                                            (zipped/2 locals members))]
+                               [enhanced_target (monad\mix meta_monad
+                                                           (function (_ [m_local m_type] enhanced_target)
+                                                             (do meta_monad
+                                                               [m_implementation (record_slots m_type)]
+                                                               (case m_implementation
+                                                                 (#Some m_tags&members)
+                                                                 (recur m_local
+                                                                        m_tags&members
+                                                                        enhanced_target)
+
+                                                                 #None
+                                                                 (in enhanced_target))))
+                                                           target
+                                                           (zipped/2 locals members))]
                                (in (` ({(~ pattern) (~ enhanced_target)} (~ (identifier$ source)))))))))
                       name tags&members body)]
           (in (list full_body)))))
@@ -4469,12 +4469,12 @@
     (failure "cond requires an uneven number of arguments.")
     (case (list\reversed tokens)
       (^ (list& else branches'))
-      (in_meta (list (list\fold (: (-> [Code Code] Code Code)
-                                   (function (_ branch else)
-                                     (let [[right left] branch]
-                                       (` (if (~ left) (~ right) (~ else))))))
-                                else
-                                (pairs branches'))))
+      (in_meta (list (list\mix (: (-> [Code Code] Code Code)
+                                  (function (_ branch else)
+                                    (let [[right left] branch]
+                                      (` (if (~ left) (~ right) (~ else))))))
+                               else
+                               (pairs branches'))))
       
       _
       (failure "Wrong syntax for cond"))))
@@ -4526,11 +4526,11 @@
         (failure "value@ can only use records.")))
 
     (^ (list [_ (#Tuple slots)] record))
-    (in_meta (list (list\fold (: (-> Code Code Code)
-                                 (function (_ slot inner)
-                                   (` (..value@ (~ slot) (~ inner)))))
-                              record
-                              slots)))
+    (in_meta (list (list\mix (: (-> Code Code Code)
+                                (function (_ slot inner)
+                                  (` (..value@ (~ slot) (~ inner)))))
+                             record
+                             slots)))
 
     (^ (list selector))
     (do meta_monad
@@ -4601,7 +4601,7 @@
             (in_meta (list\joined decls')))
 
           _
-          (failure (text\compose "Can only 'open:' structs: " (type\encode struct_type)))))
+          (failure (text\compose "Can only 'open:' structs: " (type\encoded struct_type)))))
 
       _
       (do meta_monad
@@ -4617,9 +4617,9 @@
 (macro: .public (|>> tokens)
   {#.doc (text$ ($_ "lux text concat"
                     "... Similar to the piping macro, but rather than taking an initial object to work on, creates a function for taking it." ..\n
-                    "(|>> (list\map int\encode) (interposed '' '') (fold text\compose ''''))" ..\n
+                    "(|>> (list\map int\encoded) (interposed '' '') (mix text\compose ''''))" ..\n
                     "... =>" ..\n
-                    "(function (_ <arg>) (fold text\compose '''' (interposed '' '' (list\map int\encode <arg>))))"))}
+                    "(function (_ <arg>) (mix text\compose '''' (interposed '' '' (list\map int\encoded <arg>))))"))}
   (do meta_monad
     [g!_ (..identifier "_")
      g!arg (..identifier "arg")]
@@ -4628,9 +4628,9 @@
 (macro: .public (<<| tokens)
   {#.doc (text$ ($_ "lux text concat"
                     "... Similar to the piping macro, but rather than taking an initial object to work on, creates a function for taking it." ..\n
-                    "(<<| (fold text\compose '''') (interposed '' '') (list\map int\encode))" ..\n
+                    "(<<| (mix text\compose '''') (interposed '' '') (list\map int\encoded))" ..\n
                     "... =>" ..\n
-                    "(function (_ <arg>) (fold text\compose '''' (interposed '' '' (list\map int\encode <arg>))))"))}
+                    "(function (_ <arg>) (mix text\compose '''' (interposed '' '' (list\map int\encoded <arg>))))"))}
   (do meta_monad
     [g!_ (..identifier "_")
      g!arg (..identifier "arg")]
@@ -4659,9 +4659,9 @@
       _
       (failure ($_ text\compose "Wrong syntax for refer @ " current_module
                    ..\n (|> options
-                            (list\map code\encode)
+                            (list\map code\encoded)
                             (list\interposed " ")
-                            (list\fold text\compose "")))))))
+                            (list\mix text\compose "")))))))
 
 (def: (referral_definitions module_name [r_defs r_opens])
   (-> Text Refer (Meta (List Code)))
@@ -4792,10 +4792,10 @@
 (macro: .public (\ tokens)
   {#.doc (text$ ($_ "lux text concat"
                     "... Allows accessing the value of a implementation's member." ..\n
-                    "(\ codec encode)"
+                    "(\ codec encoded)"
                     __paragraph
                     "... Also allows using that value as a function." ..\n
-                    "(\ codec encode +123)"))}
+                    "(\ codec encoded +123)"))}
   (case tokens
     (^ (list struct [_ (#Identifier member)]))
     (in_meta (list (` (let [(^open (~ (text$ ..self_reference))) (~ struct)] (~ (identifier$ member))))))
@@ -4862,17 +4862,17 @@
                                 (function (_ _) (..identifier "temp")))
                              slots)
          .let [pairs (zipped/2 slots bindings)
-               update_expr (list\fold (: (-> [Code Code] Code Code)
-                                         (function (_ [s b] v)
-                                           (` (..with@ (~ s) (~ v) (~ b)))))
-                                      value
-                                      (list\reversed pairs))
-               [_ accesses'] (list\fold (: (-> [Code Code] [Code (List (List Code))] [Code (List (List Code))])
-                                           (function (_ [new_slot new_binding] [old_record accesses'])
-                                             [(` (value@ (~ new_slot) (~ new_binding)))
-                                              (#Item (list new_binding old_record) accesses')]))
-                                        [record (: (List (List Code)) #End)]
-                                        pairs)
+               update_expr (list\mix (: (-> [Code Code] Code Code)
+                                        (function (_ [s b] v)
+                                          (` (..with@ (~ s) (~ v) (~ b)))))
+                                     value
+                                     (list\reversed pairs))
+               [_ accesses'] (list\mix (: (-> [Code Code] [Code (List (List Code))] [Code (List (List Code))])
+                                          (function (_ [new_slot new_binding] [old_record accesses'])
+                                            [(` (value@ (~ new_slot) (~ new_binding)))
+                                             (#Item (list new_binding old_record) accesses')]))
+                                       [record (: (List (List Code)) #End)]
+                                       pairs)
                accesses (list\joined (list\reversed accesses'))]]
         (in (list (` (let [(~+ accesses)]
                        (~ update_expr)))))))
@@ -5050,14 +5050,14 @@
 
     (^template [<tag>]
       [[[_ _ column] (<tag> parts)]
-       (list\fold n/min column (list\map baseline_column parts))])
+       (list\mix n/min column (list\map baseline_column parts))])
     ([#Form]
      [#Tuple])
 
     [[_ _ column] (#Record pairs)]
-    (list\fold n/min column
-               (list\compose (list\map (|>> product\left baseline_column) pairs)
-                             (list\map (|>> product\right baseline_column) pairs)))
+    (list\mix n/min column
+              (list\compose (list\map (|>> product\left baseline_column) pairs)
+                            (list\map (|>> product\right baseline_column) pairs)))
     ))
 
 (type: Documentation_Fragment
@@ -5083,9 +5083,9 @@
   [-- "lux i64 -" "Decrement function."]
   )
 
-(def: tag\encode
+(def: tag\encoded
   (-> Name Text)
-  (|>> name\encode (text\compose "#")))
+  (|>> name\encoded (text\compose "#")))
 
 (def: (repeated n x)
   (All [a] (-> Int a (List a)))
@@ -5120,27 +5120,27 @@
 (def: (example_documentation prev_location baseline example)
   (-> Location Nat Code [Location Text])
   (case example
-    (^template [<tag> <encode>]
+    (^template [<tag> <encoded>]
       [[new_location (<tag> value)]
-       (let [as_text (<encode> value)]
+       (let [as_text (<encoded> value)]
          [(updated_location new_location as_text)
           (text\compose (location_padding baseline prev_location new_location)
                         as_text)])])
-    ([#Bit        bit\encode]
-     [#Nat        nat\encode]
-     [#Int        int\encode]
-     [#Frac       frac\encode]
-     [#Text       text\encode]
-     [#Identifier name\encode]
-     [#Tag        tag\encode])
+    ([#Bit        bit\encoded]
+     [#Nat        nat\encoded]
+     [#Int        int\encoded]
+     [#Frac       frac\encoded]
+     [#Text       text\encoded]
+     [#Identifier name\encoded]
+     [#Tag        tag\encoded])
 
     (^template [<tag> <open> <close> <prep>]
       [[group_location (<tag> parts)]
-       (let [[group_location' parts_text] (list\fold (function (_ part [last_location text_accum])
-                                                       (let [[part_location part_text] (example_documentation last_location baseline part)]
-                                                         [part_location (text\compose text_accum part_text)]))
-                                                     [(revised@ #column ++ group_location) ""]
-                                                     (<prep> parts))]
+       (let [[group_location' parts_text] (list\mix (function (_ part [last_location text_accum])
+                                                      (let [[part_location part_text] (example_documentation last_location baseline part)]
+                                                        [part_location (text\compose text_accum part_text)]))
+                                                    [(revised@ #column ++ group_location) ""]
+                                                    (<prep> parts))]
          [(revised@ #column ++ group_location')
           ($_ text\compose (location_padding baseline prev_location group_location)
               <open>
@@ -5374,7 +5374,7 @@
                   (test: "Code operations & implementations"
                     (with_expansions
                       [<tests> (template [<expr> <text>]
-                                 [(compare <text> (\ Code/encode encode <expr>))]
+                                 [(compare <text> (\ codec encoded <expr>))]
 
                                  [(bit #1)                              "#1"]
                                  [(int +123)                            "+123"]
@@ -5448,7 +5448,7 @@
        ["Text" Text text$])
       
       _
-      (failure (text\compose "Cannot anti-quote type: " (name\encode name))))))
+      (failure (text\compose "Cannot anti-quote type: " (name\encoded name))))))
 
 (def: (static_literal token)
   (-> Code (Meta Code))
@@ -5542,22 +5542,22 @@
 
 (def: (multi_level_case$ g!_ [[init_pattern levels] body])
   (-> Code [Multi_Level_Case Code] (List Code))
-  (let [inner_pattern_body (list\fold (function (_ [calculation pattern] success)
-                                        (let [bind? (case pattern
-                                                      [_ (#.Identifier _)]
-                                                      #1
+  (let [inner_pattern_body (list\mix (function (_ [calculation pattern] success)
+                                       (let [bind? (case pattern
+                                                     [_ (#.Identifier _)]
+                                                     #1
 
-                                                      _
-                                                      #0)]
-                                          (` (case (~ calculation)
-                                               (~ pattern)
-                                               (~ success)
-
-                                               (~+ (if bind?
-                                                     (list)
-                                                     (list g!_ (` #.None))))))))
-                                      (` (#.Some (~ body)))
-                                      (: (List [Code Code]) (list\reversed levels)))]
+                                                     _
+                                                     #0)]
+                                         (` (case (~ calculation)
+                                              (~ pattern)
+                                              (~ success)
+
+                                              (~+ (if bind?
+                                                    (list)
+                                                    (list g!_ (` #.None))))))))
+                                     (` (#.Some (~ body)))
+                                     (: (List [Code Code]) (list\reversed levels)))]
     (list init_pattern inner_pattern_body)))
 
 (macro: .public (^multi tokens)
@@ -5617,7 +5617,7 @@
 ... 'wrong_syntax_error' for easier maintenance of the error_messages.
 (def: wrong_syntax_error
   (-> Name Text)
-  (|>> name\encode
+  (|>> name\encoded
        (text\compose "Wrong syntax for ")))
 
 (macro: .public (name_of tokens)
@@ -5649,10 +5649,10 @@
                   "In the example below, 0 corresponds to the 'a' variable."
                   (def: .public (of_list list)
                     (All [a] (-> (List a) (Row a)))
-                    (list\fold add
-                               (: (Row (:parameter 0))
-                                  empty)
-                               list)))}
+                    (list\mix add
+                              (: (Row (:parameter 0))
+                                 empty)
+                              list)))}
   (case tokens
     (^ (list [_ (#Nat idx)]))
     (do meta_monad
@@ -5662,7 +5662,7 @@
         (in (list (` (#Ex (~ (nat$ var_id))))))
 
         #None
-        (failure (text\compose "Indexed-type does not exist: " (nat\encode idx)))))
+        (failure (text\compose "Indexed-type does not exist: " (nat\encoded idx)))))
 
     _
     (failure (..wrong_syntax_error (name_of ..$)))))
@@ -5681,9 +5681,9 @@
 (macro: .public (^@ tokens)
   {#.doc (example "Allows you to simultaneously bind and de-structure a value."
                   (def: (hash (^@ set [Hash<a> _]))
-                    (list\fold (function (_ elem acc) (+ (\ Hash<a> hash elem) acc))
-                               0
-                               (to_list set))))}
+                    (list\mix (function (_ elem acc) (+ (\ Hash<a> hash elem) acc))
+                              0
+                              (to_list set))))}
   (case tokens
     (^ (list& [_meta (#Form (list [_ (#Identifier ["" name])] pattern))] body branches))
     (let [g!whole (local_identifier$ name)]
@@ -5742,7 +5742,7 @@
     (do meta_monad
       [location ..location
        .let [[module line column] location
-             location ($_ "lux text concat" (text\encode module) "," (nat\encode line) "," (nat\encode column))
+             location ($_ "lux text concat" (text\encoded module) "," (nat\encoded line) "," (nat\encoded column))
              message ($_ "lux text concat" "Undefined behavior @ " location)]]
       (in (list (` (..panic! (~ (text$ message)))))))
     
@@ -5897,12 +5897,12 @@
 
         _
         (failure ($_ text\compose
-                     "Invalid target platform (must be a value of type Text): " (name\encode identifier)
-                     " : " (..code\encode (..type_code type))))))
+                     "Invalid target platform (must be a value of type Text): " (name\encoded identifier)
+                     " : " (..code\encoded (..type_code type))))))
 
     _
     (failure ($_ text\compose
-                 "Invalid target platform syntax: " (..code\encode choice)
+                 "Invalid target platform syntax: " (..code\encoded choice)
                  ..\n "Must be either a text literal or an identifier."))))
 
 (def: (target_pick target options default)
@@ -5962,7 +5962,7 @@
       [[ann (<tag> parts)]
        (do meta_monad
          [=parts (monad\map meta_monad embedded_expansions parts)]
-         (in [(list\fold list\compose (list) (list\map left =parts))
+         (in [(list\mix list\compose (list) (list\map left =parts))
               [ann (<tag> (list\map right =parts))]]))])
     ([#Form] [#Tuple])
 
@@ -5977,7 +5977,7 @@
                                   [val_labels val_labelled] =val]]
                            (in [(list\compose key_labels val_labels) [key_labelled val_labelled]])))
                        kvs)]
-      (in [(list\fold list\compose (list) (list\map left =kvs))
+      (in [(list\mix list\compose (list) (list\map left =kvs))
            [ann (#Record (list\map right =kvs))]]))
     
     _
@@ -6124,7 +6124,7 @@
                                                     ..pairs
                                                     (list\map (function (_ [localT valueT])
                                                                 (list localT (` (..as_is (~ valueT))))))
-                                                    (list\fold list\compose (list))))]
+                                                    (list\mix list\compose (list))))]
                           (~ bodyT)))))
       (..failure ":let requires an even number of parts"))
 
diff --git a/stdlib/source/library/lux/abstract/apply.lux b/stdlib/source/library/lux/abstract/apply.lux
index 0b80263e8..7ca651988 100644
--- a/stdlib/source/library/lux/abstract/apply.lux
+++ b/stdlib/source/library/lux/abstract/apply.lux
@@ -9,8 +9,8 @@
   (: (Functor f)
      &functor)
   (: (All [a b]
-       (-> (f (-> a b)) (f a) (f b)))
-     apply))
+       (-> (f a) (f (-> a b)) (f b)))
+     on))
 
 (implementation: .public (composite f_monad f_apply g_apply)
   (All [F G]
@@ -22,16 +22,16 @@
     (functor.composite (value@ #&functor f_apply)
                        (value@ #&functor g_apply)))
   
-  (def: (apply fgf fgx)
+  (def: (on fgx fgf)
     ... TODO: Switch from this version to the one below (in comments) ASAP.
-    (let [fgf' (\ f_apply apply
-                  (\ f_monad in (\ g_apply apply))
-                  fgf)]
-      (\ f_apply apply fgf' fgx))
-    ... (let [applyF (\ f_apply apply)
-    ...       applyG (\ g_apply apply)]
+    (let [fgf' (\ f_apply on
+                  fgf
+                  (\ f_monad in (function (_ gf gx) (\ g_apply on gx gf))))]
+      (\ f_apply on fgx fgf'))
+    ... (let [applyF (\ f_apply on)
+    ...       applyG (\ g_apply on)]
     ...   ($_ applyF
-    ...       (\ f_monad in applyG)
     ...       fgf
+    ...       (\ f_monad in applyG)
     ...       fgx))
     ))
diff --git a/stdlib/source/library/lux/abstract/codec.lux b/stdlib/source/library/lux/abstract/codec.lux
index 53c95a816..82b4ad194 100644
--- a/stdlib/source/library/lux/abstract/codec.lux
+++ b/stdlib/source/library/lux/abstract/codec.lux
@@ -9,19 +9,19 @@
 
 (interface: .public (Codec m a)
   (: (-> a m)
-     encode)
+     encoded)
   (: (-> m (Try a))
-     decode))
+     decoded))
 
 (implementation: .public (composite cb_codec ba_codec)
   (All [a b c]
     (-> (Codec c b) (Codec b a)
         (Codec c a)))
-  (def: encode
-    (|>> (\ ba_codec encode)
-         (\ cb_codec encode)))
+  (def: encoded
+    (|>> (\ ba_codec encoded)
+         (\ cb_codec encoded)))
 
-  (def: (decode cy)
+  (def: (decoded cy)
     (do try.monad
-      [by (\ cb_codec decode cy)]
-      (\ ba_codec decode by))))
+      [by (\ cb_codec decoded cy)]
+      (\ ba_codec decoded by))))
diff --git a/stdlib/source/library/lux/abstract/comonad.lux b/stdlib/source/library/lux/abstract/comonad.lux
index 8803eed86..281dc7fc9 100644
--- a/stdlib/source/library/lux/abstract/comonad.lux
+++ b/stdlib/source/library/lux/abstract/comonad.lux
@@ -3,7 +3,7 @@
    [lux #*
     [data
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      [number
       ["n" nat]]]
@@ -41,21 +41,21 @@
             g!_ (identifier "_")
             g!map (identifier "map")
             g!split (identifier "split")
-            body' (list\fold (: (-> [Code Code] Code Code)
-                                (function (_ binding body')
-                                  (with_expansions [<default> (` (|> (~ value) (~ g!split) ((~ g!map) (function ((~ g!_) (~ var)) (~ body')))))]
-                                    (let [[var value] binding]
-                                      (case var
-                                        [_ (#.Identifier ["" _])]
-                                        <default>
+            body' (list\mix (: (-> [Code Code] Code Code)
+                               (function (_ binding body')
+                                 (with_expansions [<default> (` (|> (~ value) (~ g!split) ((~ g!map) (function ((~ g!_) (~ var)) (~ body')))))]
+                                   (let [[var value] binding]
+                                     (case var
+                                       [_ (#.Identifier ["" _])]
+                                       <default>
 
-                                        [_ (#.Identifier _)]
-                                        (` ((~ var) (~ value) (~ body')))
+                                       [_ (#.Identifier _)]
+                                       (` ((~ var) (~ value) (~ body')))
 
-                                        _
-                                        <default>)))))
-                             body
-                             (list.reversed (list.pairs bindings)))]
+                                       _
+                                       <default>)))))
+                            body
+                            (list.reversed (list.pairs bindings)))]
         (#.Right [state (list (case ?name
                                 (#.Some name)
                                 (let [name [location.dummy (#.Identifier ["" name])]]
diff --git a/stdlib/source/library/lux/abstract/fold.lux b/stdlib/source/library/lux/abstract/fold.lux
deleted file mode 100644
index ba8a93381..000000000
--- a/stdlib/source/library/lux/abstract/fold.lux
+++ /dev/null
@@ -1,16 +0,0 @@
-(.module:
-  [library
-   [lux #*]]
-  [//
-   [monoid (#+ Monoid)]])
-
-(interface: .public (Fold F)
-  (: (All [a b]
-       (-> (-> b a a) a (F b) a))
-     fold))
-
-(def: .public (with_monoid monoid fold value)
-  (All [F a]
-    (-> (Monoid a) (Fold F) (F a) a))
-  (let [(^open "/\.") monoid]
-    (fold /\compose /\identity value)))
diff --git a/stdlib/source/library/lux/abstract/mix.lux b/stdlib/source/library/lux/abstract/mix.lux
new file mode 100644
index 000000000..0788f38d0
--- /dev/null
+++ b/stdlib/source/library/lux/abstract/mix.lux
@@ -0,0 +1,16 @@
+(.module:
+  [library
+   [lux #*]]
+  [//
+   [monoid (#+ Monoid)]])
+
+(interface: .public (Mix F)
+  (: (All [a b]
+       (-> (-> b a a) a (F b) a))
+     mix))
+
+(def: .public (with_monoid monoid mix value)
+  (All [F a]
+    (-> (Monoid a) (Mix F) (F a) a))
+  (let [(^open "/\.") monoid]
+    (mix /\compose /\identity value)))
diff --git a/stdlib/source/library/lux/abstract/monad.lux b/stdlib/source/library/lux/abstract/monad.lux
index 2d81c09e7..85159e505 100644
--- a/stdlib/source/library/lux/abstract/monad.lux
+++ b/stdlib/source/library/lux/abstract/monad.lux
@@ -6,7 +6,7 @@
   [//
    [functor (#+ Functor)]])
 
-(def: (list\fold f init xs)
+(def: (list\mix f init xs)
   (All [a b]
     (-> (-> b a a) a (List b) a)) 
   (case xs
@@ -14,7 +14,7 @@
     init
 
     (#.Item x xs')
-    (list\fold f (f x init) xs')))
+    (list\mix f (f x init) xs')))
 
 (def: (list\size xs)
   (All [a] (-> (List a) Nat))
@@ -30,9 +30,9 @@
 (def: (reversed xs)
   (All [a]
     (-> (List a) (List a)))
-  (list\fold (function (_ head tail) (#.Item head tail))
-             #.End
-             xs))
+  (list\mix (function (_ head tail) (#.Item head tail))
+            #.End
+            xs))
 
 (def: (pairs xs)
   (All [a] (-> (List a) (List [a a])))
@@ -72,21 +72,21 @@
             g!_ (identifier "_")
             g!map (identifier "map")
             g!join (identifier "join")
-            body' (list\fold (: (-> [Code Code] Code Code)
-                                (function (_ binding body')
-                                  (with_expansions [<default> (` (|> (~ value) ((~ g!map) (function ((~ g!_) (~ var)) (~ body'))) (~ g!join)))]
-                                    (let [[var value] binding]
-                                      (case var
-                                        [_ (#.Identifier ["" _])]
-                                        <default>
-
-                                        [_ (#.Identifier _)]
-                                        (` ((~ var) (~ value) (~ body')))
-
-                                        _
-                                        <default>)))))
-                             body
-                             (reversed (pairs bindings)))]
+            body' (list\mix (: (-> [Code Code] Code Code)
+                               (function (_ binding body')
+                                 (with_expansions [<default> (` (|> (~ value) ((~ g!map) (function ((~ g!_) (~ var)) (~ body'))) (~ g!join)))]
+                                   (let [[var value] binding]
+                                     (case var
+                                       [_ (#.Identifier ["" _])]
+                                       <default>
+
+                                       [_ (#.Identifier _)]
+                                       (` ((~ var) (~ value) (~ body')))
+
+                                       _
+                                       <default>)))))
+                            body
+                            (reversed (pairs bindings)))]
         (#.Right [state (list (case ?name
                                 (#.Some name)
                                 (let [name [location.dummy (#.Identifier ["" name])]]
@@ -164,7 +164,7 @@
                             (recur xs'))))
             !\join)))))
 
-(def: .public (fold monad f init xs)
+(def: .public (mix monad f init xs)
   (All [M a b]
     (-> (Monad M) (-> b a (M a)) a (List b)
         (M a)))
@@ -175,4 +175,4 @@
     (#.Item x xs')
     (do monad
       [init' (f x init)]
-      (fold monad f init' xs'))))
+      (mix monad f init' xs'))))
diff --git a/stdlib/source/library/lux/abstract/monad/free.lux b/stdlib/source/library/lux/abstract/monad/free.lux
index 67aa94755..82b405ccc 100644
--- a/stdlib/source/library/lux/abstract/monad/free.lux
+++ b/stdlib/source/library/lux/abstract/monad/free.lux
@@ -24,9 +24,10 @@
 (implementation: .public (apply dsl)
   (All [F] (-> (Functor F) (Apply (Free F))))
   
-  (def: &functor (..functor dsl))
+  (def: &functor
+    (..functor dsl))
 
-  (def: (apply ef ea)
+  (def: (on ea ef)
     (case [ef ea]
       [(#Pure f) (#Pure a)]
       (#Pure (f a))
@@ -37,9 +38,7 @@
                   fa))
 
       [(#Effect ff) _]
-      (#Effect (\ dsl map
-                  (function (_ f) (apply f ea))
-                  ff))
+      (#Effect (\ dsl map (on ea) ff))
       )))
 
 (implementation: .public (monad dsl)
diff --git a/stdlib/source/library/lux/abstract/monad/indexed.lux b/stdlib/source/library/lux/abstract/monad/indexed.lux
index b43ac87e8..f255f9727 100644
--- a/stdlib/source/library/lux/abstract/monad/indexed.lux
+++ b/stdlib/source/library/lux/abstract/monad/indexed.lux
@@ -6,7 +6,7 @@
       ["<.>" code (#+ Parser)]]]
     [data
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     ["." macro
      [syntax (#+ syntax:)]
      ["." code]]]]
@@ -63,20 +63,20 @@
                       context (<code>.tuple (<>.some context))
                       expression <code>.any])
   (macro.with_identifiers [g!_ g!then]
-    (let [body (list\fold (function (_ context next)
-                            (case context
-                              (#Macro macro parameter)
-                              (` ((~ (code.identifier macro))
-                                  (~ parameter)
-                                  (~ next)))
-                              
-                              (#Binding [binding value])
-                              (` ((~ g!then)
-                                  (.function ((~ g!_) (~ binding))
-                                    (~ next))
-                                  (~ value)))))
-                          expression
-                          (list.reversed context))]
+    (let [body (list\mix (function (_ context next)
+                           (case context
+                             (#Macro macro parameter)
+                             (` ((~ (code.identifier macro))
+                                 (~ parameter)
+                                 (~ next)))
+                             
+                             (#Binding [binding value])
+                             (` ((~ g!then)
+                                 (.function ((~ g!_) (~ binding))
+                                   (~ next))
+                                 (~ value)))))
+                         expression
+                         (list.reversed context))]
       (in (list (case ?name
                   (#.Some name)
                   (let [name (code.local_identifier name)]
diff --git a/stdlib/source/library/lux/abstract/monoid.lux b/stdlib/source/library/lux/abstract/monoid.lux
index fac4862ae..01dacde2e 100644
--- a/stdlib/source/library/lux/abstract/monoid.lux
+++ b/stdlib/source/library/lux/abstract/monoid.lux
@@ -1,6 +1,6 @@
 (.module:
   [library
-   [lux #*]])
+   [lux (#- and)]])
 
 (interface: .public (Monoid a)
   (: a
@@ -8,7 +8,7 @@
   (: (-> a a a)
      compose))
 
-(def: .public (composite left right)
+(def: .public (and left right)
   (All [l r] (-> (Monoid l) (Monoid r) (Monoid [l r])))
   (implementation
    (def: identity
diff --git a/stdlib/source/library/lux/control/concatenative.lux b/stdlib/source/library/lux/control/concatenative.lux
index 93a99ceb2..de474236a 100644
--- a/stdlib/source/library/lux/control/concatenative.lux
+++ b/stdlib/source/library/lux/control/concatenative.lux
@@ -10,7 +10,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold functor)]]]
+      ["." list ("#\." mix functor)]]]
     ["." macro (#+ with_identifiers)
      ["." code]
      ["." template]
@@ -51,12 +51,12 @@
              (<>.and (|> bottom^ (<>\map (|>> #.Some)))
                      (<>\in (list)))))
 
-(def: (stack_fold tops bottom)
+(def: (stack_mix tops bottom)
   (-> (List Code) Code Code)
-  (list\fold (function (_ top bottom)
-               (` [(~ bottom) (~ top)]))
-             bottom
-             tops))
+  (list\mix (function (_ top bottom)
+              (` [(~ bottom) (~ top)]))
+            bottom
+            tops))
 
 (def: (singleton expander)
   (-> (Meta (List Code)) (Meta Code))
@@ -74,24 +74,24 @@
                       inputs stack^
                       outputs stack^])
   (let [de_alias (function (_ aliased)
-                   (list\fold (function (_ [from to] pre)
-                                (code.replaced (code.local_identifier from) to pre))
-                              aliased
-                              aliases))]
+                   (list\mix (function (_ [from to] pre)
+                               (code.replaced (code.local_identifier from) to pre))
+                             aliased
+                             aliases))]
     (case [(|> inputs (value@ #bottom) (maybe\map (|>> code.nat (~) #.Parameter (`))))
            (|> outputs (value@ #bottom) (maybe\map (|>> code.nat (~) #.Parameter (`))))]
       [(#.Some bottomI) (#.Some bottomO)]
       (monad.do meta.monad
-        [inputC (singleton (macro.full_expansion (stack_fold (value@ #top inputs) bottomI)))
-         outputC (singleton (macro.full_expansion (stack_fold (value@ #top outputs) bottomO)))]
+        [inputC (singleton (macro.full_expansion (stack_mix (value@ #top inputs) bottomI)))
+         outputC (singleton (macro.full_expansion (stack_mix (value@ #top outputs) bottomO)))]
         (in (list (` (-> (~ (de_alias inputC))
                          (~ (de_alias outputC)))))))
 
       [?bottomI ?bottomO]
       (with_identifiers [g!stack]
         (monad.do meta.monad
-          [inputC (singleton (macro.full_expansion (stack_fold (value@ #top inputs) (maybe.else g!stack ?bottomI))))
-           outputC (singleton (macro.full_expansion (stack_fold (value@ #top outputs) (maybe.else g!stack ?bottomO))))]
+          [inputC (singleton (macro.full_expansion (stack_mix (value@ #top inputs) (maybe.else g!stack ?bottomI))))
+           outputC (singleton (macro.full_expansion (stack_mix (value@ #top outputs) (maybe.else g!stack ?bottomO))))]
           (in (list (` (All [(~ g!stack)]
                          (-> (~ (de_alias inputC))
                              (~ (de_alias outputC))))))))))))
@@ -135,7 +135,7 @@
                         (-> (-> (~+ g!inputs) (~ g!output))
                             (=> [(~+ g!inputs)] [(~ g!output)])))
                       (function ((~ g!) (~ g!func))
-                        (function ((~ g!) (~ (stack_fold g!inputs g!stack)))
+                        (function ((~ g!) (~ (stack_mix g!inputs g!stack)))
                           [(~ g!stack) ((~ g!func) (~+ g!inputs))])))))))))
 
 (template [<arity>]
diff --git a/stdlib/source/library/lux/control/concurrency/actor.lux b/stdlib/source/library/lux/control/concurrency/actor.lux
index 20ab00c06..0e248ff9b 100644
--- a/stdlib/source/library/lux/control/concurrency/actor.lux
+++ b/stdlib/source/library/lux/control/concurrency/actor.lux
@@ -18,7 +18,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." monoid monad fold)]]]
+      ["." list ("#\." monoid monad)]]]
     ["." macro (#+ with_identifiers)
      ["." code]
      [syntax (#+ syntax:)
diff --git a/stdlib/source/library/lux/control/concurrency/async.lux b/stdlib/source/library/lux/control/concurrency/async.lux
index 58fbb4ea6..bdd852ffc 100644
--- a/stdlib/source/library/lux/control/concurrency/async.lux
+++ b/stdlib/source/library/lux/control/concurrency/async.lux
@@ -104,7 +104,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (let [[fb resolve] (..async [])]
       (exec
         (io.run! (..upon! (function (_ f)
diff --git a/stdlib/source/library/lux/control/concurrency/frp.lux b/stdlib/source/library/lux/control/concurrency/frp.lux
index cb3645138..1e447ef17 100644
--- a/stdlib/source/library/lux/control/concurrency/frp.lux
+++ b/stdlib/source/library/lux/control/concurrency/frp.lux
@@ -96,13 +96,13 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (do async.monad
       [item_f ff
        item_a fa]
       (case [item_f item_a]
         [(#.Some [head_f tail_f]) (#.Some [head_a tail_a])]
-        (in (#.Some [(head_f head_a) (apply tail_f tail_a)]))
+        (in (#.Some [(head_f head_a) (on tail_a tail_f)]))
 
         _
         (in #.None)))))
@@ -189,7 +189,7 @@
                (#.Some [value ..empty]))
              async))
 
-(def: .public (aggregate f init channel)
+(def: .public (mix f init channel)
   (All [a b]
     (-> (-> b a (Async a)) a (Channel b)
         (Async a)))
@@ -202,9 +202,9 @@
       (#.Some [head tail])
       (do !
         [init' (f head init)]
-        (aggregate f init' tail)))))
+        (mix f init' tail)))))
 
-(def: .public (aggregates f init channel)
+(def: .public (mixes f init channel)
   (All [a b]
     (-> (-> b a (Async a)) a (Channel b)
         (Channel a)))
@@ -217,7 +217,7 @@
       (#.Some [head tail])
       (do !
         [init' (f head init)]
-        (in (#.Some [init (aggregates f init' tail)]))))))
+        (in (#.Some [init (mixes f init' tail)]))))))
 
 (def: .public (poll milli_seconds action)
   (All [a]
diff --git a/stdlib/source/library/lux/control/concurrency/stm.lux b/stdlib/source/library/lux/control/concurrency/stm.lux
index a41d12aba..5e9759bdb 100644
--- a/stdlib/source/library/lux/control/concurrency/stm.lux
+++ b/stdlib/source/library/lux/control/concurrency/stm.lux
@@ -151,7 +151,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ tx)
       (let [[tx' f] (ff tx)
             [tx'' a] (fa tx')]
diff --git a/stdlib/source/library/lux/control/continuation.lux b/stdlib/source/library/lux/control/continuation.lux
index 9a65c9d3e..15fdc16d1 100644
--- a/stdlib/source/library/lux/control/continuation.lux
+++ b/stdlib/source/library/lux/control/continuation.lux
@@ -63,7 +63,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fv)
+  (def: (on fv ff)
     (function (_ k)
       (|> (k (f v))
           (function (_ v)) fv
diff --git a/stdlib/source/library/lux/control/exception.lux b/stdlib/source/library/lux/control/exception.lux
index d957188ea..c59767584 100644
--- a/stdlib/source/library/lux/control/exception.lux
+++ b/stdlib/source/library/lux/control/exception.lux
@@ -13,7 +13,7 @@
      ["." product]
      ["." text ("#\." monoid)]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      ["." code]
      [syntax (#+ syntax:)
@@ -108,10 +108,10 @@
 (def: (report' entries)
   (-> (List [Text Text]) Text)
   (let [header_separator ": "
-        largest_header_size (list\fold (function (_ [header _] max)
-                                         (n.max (text.size header) max))
-                                       0
-                                       entries)
+        largest_header_size (list\mix (function (_ [header _] max)
+                                        (n.max (text.size header) max))
+                                      0
+                                      entries)
         on_new_line (|> " "
                         (list.repeated (n.+ (text.size header_separator)
                                             largest_header_size))
@@ -131,10 +131,10 @@
       ""
 
       (#.Item head tail)
-      (list\fold (function (_ post pre)
-                   ($_ text\compose pre text.new_line (on_entry post)))
-                 (on_entry head)
-                 tail))))
+      (list\mix (function (_ post pre)
+                  ($_ text\compose pre text.new_line (on_entry post)))
+                (on_entry head)
+                tail))))
 
 (syntax: .public (report [entries (<>.many (<code>.tuple (<>.and <code>.any <code>.any)))])
   (in (list (` ((~! report') (list (~+ (|> entries
@@ -145,11 +145,11 @@
   (All [a]
     (-> (-> a Text) (List a) Text))
   (|> entries
-      (list\fold (function (_ entry [index next])
-                   [(++ index)
-                    (#.Item [(n\encode index) (format entry)]
-                            next)])
-                 [0 #.End])
+      (list\mix (function (_ entry [index next])
+                  [(++ index)
+                   (#.Item [(n\encoded index) (format entry)]
+                           next)])
+                [0 #.End])
       product.right
       list.reversed
       ..report'))
diff --git a/stdlib/source/library/lux/control/io.lux b/stdlib/source/library/lux/control/io.lux
index 125ebfb67..4666dfb8a 100644
--- a/stdlib/source/library/lux/control/io.lux
+++ b/stdlib/source/library/lux/control/io.lux
@@ -52,7 +52,7 @@
     
     (def: &functor ..functor)
 
-    (def: (apply ff fa)
+    (def: (on fa ff)
       (!io ((run!' ff) (run!' fa)))))
 
   (implementation: .public monad
diff --git a/stdlib/source/library/lux/control/lazy.lux b/stdlib/source/library/lux/control/lazy.lux
index 46901a3c1..58cf7a526 100644
--- a/stdlib/source/library/lux/control/lazy.lux
+++ b/stdlib/source/library/lux/control/lazy.lux
@@ -61,7 +61,7 @@
   (Apply Lazy)
   
   (def: &functor ..functor)
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (lazy ((value ff) (value fa)))))
 
 (implementation: .public monad
diff --git a/stdlib/source/library/lux/control/maybe.lux b/stdlib/source/library/lux/control/maybe.lux
index 7dcf84574..854ef0402 100644
--- a/stdlib/source/library/lux/control/maybe.lux
+++ b/stdlib/source/library/lux/control/maybe.lux
@@ -41,7 +41,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (case [ff fa]
       [(#.Some f) (#.Some a)]
       (#.Some (f a))
diff --git a/stdlib/source/library/lux/control/parser.lux b/stdlib/source/library/lux/control/parser.lux
index 6d3246295..30c728cd2 100644
--- a/stdlib/source/library/lux/control/parser.lux
+++ b/stdlib/source/library/lux/control/parser.lux
@@ -36,7 +36,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ input)
       (case (ff input)
         (#try.Success [input' f])
@@ -301,7 +301,7 @@
       (#try.Failure error)
 
       (#try.Success [input' to_decode])
-      (case (\ codec decode to_decode)
+      (case (\ codec decoded to_decode)
         (#try.Failure error)
         (#try.Failure error)
         
diff --git a/stdlib/source/library/lux/control/parser/binary.lux b/stdlib/source/library/lux/control/parser/binary.lux
index ec251b304..4fd9d15f5 100644
--- a/stdlib/source/library/lux/control/parser/binary.lux
+++ b/stdlib/source/library/lux/control/parser/binary.lux
@@ -173,7 +173,7 @@
          (Parser Text)
          (do //.monad
            [utf8 <binary>]
-           (//.lifted (\ utf8.codec decode utf8)))))]
+           (//.lifted (\ utf8.codec decoded utf8)))))]
 
   [08 utf8/8  ..binary/8]
   [16 utf8/16 ..binary/16]
diff --git a/stdlib/source/library/lux/control/parser/json.lux b/stdlib/source/library/lux/control/parser/json.lux
index cc954fc1b..1348b92b4 100644
--- a/stdlib/source/library/lux/control/parser/json.lux
+++ b/stdlib/source/library/lux/control/parser/json.lux
@@ -82,9 +82,8 @@
    ["Reference" (/.format reference)]
    ["Sample" (/.format sample)]))
 
-(template [<test> <check> <type> <equivalence> <tag> <desc>]
+(template [<test> <check> <type> <equivalence> <tag>]
   [(def: .public (<test> test)
-     {#.doc (code.text ($_ text\compose "Asks whether a JSON value is a " <desc> "."))}
      (-> <type> (Parser Bit))
      (do //.monad
        [head ..any]
@@ -96,7 +95,6 @@
          (//.failure (exception.error ..unexpected_value [head])))))
 
    (def: .public (<check> test)
-     {#.doc (code.text ($_ text\compose "Ensures a JSON value is a " <desc> "."))}
      (-> <type> (Parser Any))
      (do //.monad
        [head ..any]
@@ -109,9 +107,9 @@
          _
          (//.failure (exception.error ..unexpected_value [head])))))]
 
-  [boolean? boolean! /.Boolean bit.equivalence  #/.Boolean "boolean"]
-  [number?  number!  /.Number  frac.equivalence #/.Number  "number"]
-  [string?  string!  /.String  text.equivalence #/.String  "string"]
+  [boolean? boolean! /.Boolean bit.equivalence  #/.Boolean]
+  [number?  number!  /.Number  frac.equivalence #/.Number]
+  [string?  string!  /.String  text.equivalence #/.String]
   )
 
 (def: .public (nullable parser)
diff --git a/stdlib/source/library/lux/control/parser/synthesis.lux b/stdlib/source/library/lux/control/parser/synthesis.lux
index b336a0d58..df28b3df1 100644
--- a/stdlib/source/library/lux/control/parser/synthesis.lux
+++ b/stdlib/source/library/lux/control/parser/synthesis.lux
@@ -11,8 +11,6 @@
      ["." name]
      ["." text
       ["%" format (#+ format)]]]
-    [macro
-     ["." template]]
     [math
      [number
       ["n" nat]
@@ -89,7 +87,6 @@
 
 (template [<query> <assertion> <tag> <type> <eq>]
   [(`` (def: .public <query>
-         {#.doc (example (~~ (template.text ["Queries for a " <query> " synthesis node."])))}
          (Parser <type>)
          (.function (_ input)
            (case input
@@ -100,7 +97,6 @@
              (exception.except ..cannot_parse input)))))
 
    (`` (def: .public (<assertion> expected)
-         {#.doc (example (~~ (template.text ["Checks for a specific " <query> " synthesis node."])))}
          (-> <type> (Parser Any))
          (.function (_ input)
            (case input
diff --git a/stdlib/source/library/lux/control/parser/text.lux b/stdlib/source/library/lux/control/parser/text.lux
index a9f69d81e..0e9724a15 100644
--- a/stdlib/source/library/lux/control/parser/text.lux
+++ b/stdlib/source/library/lux/control/parser/text.lux
@@ -11,7 +11,7 @@
      ["/" text (#+ Char) ("#\." monoid)]
      ["." product]
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [macro
      ["." code]
      ["." template]]
@@ -40,13 +40,13 @@
 
 (exception: .public (unconsumed_input {offset Offset} {tape Text})
   (exception.report
-   ["Offset" (n\encode offset)]
-   ["Input size" (n\encode (/.size tape))]
+   ["Offset" (n\encoded offset)]
+   ["Input size" (n\encoded (/.size tape))]
    ["Remaining input" (remaining' offset tape)]))
 
 (exception: .public (expected_to_fail {offset Offset} {tape Text})
   (exception.report
-   ["Offset" (n\encode offset)]
+   ["Offset" (n\encoded offset)]
    ["Input" (remaining' offset tape)]))
 
 (exception: .public cannot_parse)
@@ -73,12 +73,12 @@
   (do //.monad
     [offset ..offset
      slices parser]
-    (in (list\fold (function (_ [slice::basis slice::distance]
-                                [total::basis total::distance])
-                     [total::basis ("lux i64 +" slice::distance total::distance)])
-                   {#basis offset
-                    #distance 0}
-                   slices))))
+    (in (list\mix (function (_ [slice::basis slice::distance]
+                               [total::basis total::distance])
+                    [total::basis ("lux i64 +" slice::distance total::distance)])
+                  {#basis offset
+                   #distance 0}
+                  slices))))
 
 (def: .public any
   (Parser Text)
@@ -202,9 +202,8 @@
   [character_should_not_be]
   )
 
-(template [<name> <modifier> <exception> <description_modifier>]
+(template [<name> <modifier> <exception>]
   [(def: .public (<name> options)
-     {#.doc (code.text ($_ /\compose "Yields characters that are" <description_modifier> " part of a piece of text."))}
      (-> Text (Parser Text))
      (function (_ [offset tape])
        (case (/.char offset tape)
@@ -217,13 +216,12 @@
          _
          (exception.except ..cannot_parse []))))]
 
-  [one_of  |>   ..character_should_be ""]
-  [none_of .not ..character_should_not_be " not"]
+  [one_of  |>   ..character_should_be]
+  [none_of .not ..character_should_not_be]
   )
 
-(template [<name> <modifier> <exception> <description_modifier>]
+(template [<name> <modifier> <exception>]
   [(def: .public (<name> options)
-     {#.doc (code.text ($_ /\compose "Yields characters (as a slice) that are" <description_modifier> " part of a piece of text."))}
      (-> Text (Parser Slice))
      (function (_ [offset tape])
        (case (/.char offset tape)
@@ -238,8 +236,8 @@
          _
          (exception.except ..cannot_slice []))))]
 
-  [one_of!  |>   ..character_should_be ""]
-  [none_of! .not ..character_should_not_be " not"]
+  [one_of!  |>   ..character_should_be]
+  [none_of! .not ..character_should_not_be]
   )
 
 (exception: .public (character_does_not_satisfy_predicate {character Char})
diff --git a/stdlib/source/library/lux/control/parser/tree.lux b/stdlib/source/library/lux/control/parser/tree.lux
index 1f7a54a1a..0208134a3 100644
--- a/stdlib/source/library/lux/control/parser/tree.lux
+++ b/stdlib/source/library/lux/control/parser/tree.lux
@@ -32,9 +32,8 @@
 
 (exception: .public cannot_move_further)
 
-(template [<name> <direction> <doc>]
+(template [<name> <direction>]
   [(def: .public <name>
-     {#.doc (example <doc>)}
      (All [t] (Parser t []))
      (function (_ zipper)
        (case (<direction> zipper)
@@ -44,28 +43,18 @@
          (#.Some next)
          (#try.Success [next []]))))]
 
-  [down      zipper.down
-   "Move down."]
-  [up        zipper.up
-   "Move up."]
+  [down      zipper.down]
+  [up        zipper.up]
 
-  [right     zipper.right
-   "Move to the right."]
-  [rightmost zipper.rightmost
-   "Move to the rightmost node."]
+  [right     zipper.right]
+  [rightmost zipper.rightmost]
 
-  [left      zipper.left
-   "Move to the left."]
-  [leftmost  zipper.leftmost
-   "Move to the leftmost node."]
+  [left      zipper.left]
+  [leftmost  zipper.leftmost]
   
-  [next      zipper.next
-   "Move to the next node."]
-  [end       zipper.end
-   "Move to the last node."]
+  [next      zipper.next]
+  [end       zipper.end]
   
-  [previous  zipper.previous
-   "Move to the previous node."]
-  [start     zipper.start
-   "Move to the root node."]
+  [previous  zipper.previous]
+  [start     zipper.start]
   )
diff --git a/stdlib/source/library/lux/control/parser/type.lux b/stdlib/source/library/lux/control/parser/type.lux
index 029d130fd..0b726282a 100644
--- a/stdlib/source/library/lux/control/parser/type.lux
+++ b/stdlib/source/library/lux/control/parser/type.lux
@@ -14,8 +14,7 @@
       ["." list ("#\." functor)]
       ["." dictionary (#+ Dictionary)]]]
     [macro
-     ["." code]
-     ["." template]]
+     ["." code]]
     [math
      [number
       ["n" nat ("#\." decimal)]]]
@@ -133,7 +132,7 @@
 
 (def: (label idx)
   (-> Nat Code)
-  (code.local_identifier ($_ text\compose "label" text.tab (n\encode idx))))
+  (code.local_identifier ($_ text\compose "label" text.tab (n\encoded idx))))
 
 (def: .public (with_extension type poly)
   (All [a] (-> Type (Parser a) (Parser [Code a])))
@@ -151,7 +150,6 @@
 
 (template [<name> <flattener> <tag> <exception>]
   [(`` (def: .public (<name> poly)
-         {#.doc (example (~~ (template.text ["Parses the contents of a " <name> " type."])))}
          (All [a] (-> (Parser a) (Parser a)))
          (do //.monad
            [headT ..any]
diff --git a/stdlib/source/library/lux/control/parser/xml.lux b/stdlib/source/library/lux/control/parser/xml.lux
index 2b0332544..2e982ad45 100644
--- a/stdlib/source/library/lux/control/parser/xml.lux
+++ b/stdlib/source/library/lux/control/parser/xml.lux
@@ -35,7 +35,7 @@
 
 (exception: .public (unconsumed_inputs {inputs (List XML)})
   (exception.report
-   ["Inputs" (exception.listing (\ /.codec encode) inputs)]))
+   ["Inputs" (exception.listing (\ /.codec encoded) inputs)]))
 
 (def: (result' parser attrs documents)
   (All [a] (-> (Parser a) Attrs (List XML) (Try a)))
diff --git a/stdlib/source/library/lux/control/pipe.lux b/stdlib/source/library/lux/control/pipe.lux
index b194d6749..8fda36325 100644
--- a/stdlib/source/library/lux/control/pipe.lux
+++ b/stdlib/source/library/lux/control/pipe.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Composable extensions to the piping macros (|> and <|) that enhance them with various abilities."}
   [library
    [lux #*
     [abstract
@@ -11,7 +10,7 @@
     [data
      ["." identity]
      [collection
-      ["." list ("#\." fold monad)]]]
+      ["." list ("#\." monad)]]]
     [macro (#+ with_identifiers)
      [syntax (#+ syntax:)]
      ["." code]]
diff --git a/stdlib/source/library/lux/control/reader.lux b/stdlib/source/library/lux/control/reader.lux
index e1ffffd7b..7d6462858 100644
--- a/stdlib/source/library/lux/control/reader.lux
+++ b/stdlib/source/library/lux/control/reader.lux
@@ -33,7 +33,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ env)
       ((ff env) (fa env)))))
 
diff --git a/stdlib/source/library/lux/control/region.lux b/stdlib/source/library/lux/control/region.lux
index 9d9f579c0..1ca544ca6 100644
--- a/stdlib/source/library/lux/control/region.lux
+++ b/stdlib/source/library/lux/control/region.lux
@@ -11,7 +11,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold)]]]]]
+      ["." list ("#\." mix)]]]]]
   [//
    ["." exception (#+ Exception exception:)]])
 
@@ -59,7 +59,7 @@
     [[cleaners output] (computation [[] (list)])]
     (|> cleaners
         (monad.map ! (function (_ cleaner) (cleaner [])))
-        (\ ! map (list\fold clean output)))))
+        (\ ! map (list\mix clean output)))))
 
 (def: .public (acquire! monad cleaner value)
   (All [! a] (-> (Monad !) (-> a (! (Try Any))) a
@@ -95,7 +95,7 @@
   (def: &functor
     (..functor (value@ #monad.&functor super)))
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ [region cleaners])
       (do super
         [[cleaners ef] (ff [region cleaners])
diff --git a/stdlib/source/library/lux/control/remember.lux b/stdlib/source/library/lux/control/remember.lux
index 9c6e7a97e..eaba75049 100644
--- a/stdlib/source/library/lux/control/remember.lux
+++ b/stdlib/source/library/lux/control/remember.lux
@@ -40,7 +40,7 @@
               <c>.int)
       (do <>.monad
         [raw <c>.text]
-        (case (\ date.codec decode raw)
+        (case (\ date.codec decoded raw)
           (#try.Success date)
           (in date)
           
@@ -65,13 +65,6 @@
   [(`` (syntax: .public (<name> [deadline ..deadline
                                  message <c>.text
                                  focus (<>.maybe <c>.any)])
-         {#.doc (example (~~ (template.text ["A " <message> " message with an expiration date."]))
-                         "Can have an optional piece of code to focus on."
-                         (<name> "2022-04-01"
-                                 "Do this, that and the other.")
-                         (<name> "2022-04-01"
-                                 "Improve the performace."
-                                 (some (complicated (computation 123)))))}
          (in (list (` (..remember (~ (code.text (%.date deadline)))
                         (~ (code.text (format <message> " " message)))
                         (~+ (case focus
diff --git a/stdlib/source/library/lux/control/security/policy.lux b/stdlib/source/library/lux/control/security/policy.lux
index 9e33fa86b..497e250ff 100644
--- a/stdlib/source/library/lux/control/security/policy.lux
+++ b/stdlib/source/library/lux/control/security/policy.lux
@@ -66,7 +66,7 @@
     
     (def: &functor ..functor)
     
-    (def: (apply ff fa)
+    (def: (on fa ff)
       (:abstraction ((:representation ff) (:representation fa)))))
 
   (implementation: .public monad
diff --git a/stdlib/source/library/lux/control/state.lux b/stdlib/source/library/lux/control/state.lux
index 109491fee..586cb652c 100644
--- a/stdlib/source/library/lux/control/state.lux
+++ b/stdlib/source/library/lux/control/state.lux
@@ -52,7 +52,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ state)
       (let [[state' f] (ff state)
             [state'' a] (fa state')]
@@ -101,7 +101,7 @@
   
   (def: &functor (with//functor (\ monad &functor)))
 
-  (def: (apply sFf sFa)
+  (def: (on sFa sFf)
     (function (_ state)
       (do monad
         [[state f] (sFf state)
diff --git a/stdlib/source/library/lux/control/thread.lux b/stdlib/source/library/lux/control/thread.lux
index b70813ec9..8366b2efc 100644
--- a/stdlib/source/library/lux/control/thread.lux
+++ b/stdlib/source/library/lux/control/thread.lux
@@ -81,7 +81,7 @@
 
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ !)
       ((ff !) (fa !)))))
 
diff --git a/stdlib/source/library/lux/control/try.lux b/stdlib/source/library/lux/control/try.lux
index 05d7d69ea..2a1fce570 100644
--- a/stdlib/source/library/lux/control/try.lux
+++ b/stdlib/source/library/lux/control/try.lux
@@ -29,7 +29,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (case ff
       (#Success f)
       (case fa
@@ -123,7 +123,7 @@
     (#Success value)
 
     #.None
-    (#Failure (`` (("lux in-module" (~~ (static .prelude_module)) .name\encode)
+    (#Failure (`` (("lux in-module" (~~ (static .prelude_module)) .name\encoded)
                    (name_of ..of_maybe))))))
 
 (macro: .public (else tokens compiler)
diff --git a/stdlib/source/library/lux/control/writer.lux b/stdlib/source/library/lux/control/writer.lux
index 194822f60..d42e57780 100644
--- a/stdlib/source/library/lux/control/writer.lux
+++ b/stdlib/source/library/lux/control/writer.lux
@@ -3,7 +3,7 @@
    [lux #*
     ["@" target]
     [abstract
-     monoid
+     [monoid (#+ Monoid)]
      [apply (#+ Apply)]
      ["." functor (#+ Functor)]
      ["." monad (#+ Monad do)]]]])
@@ -30,7 +30,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (let [[log1 f] ff
           [log2 a] fa]
       [(\ monoid compose log1 log2) (f a)])))
diff --git a/stdlib/source/library/lux/data/bit.lux b/stdlib/source/library/lux/data/bit.lux
index 6d7b7c9c3..38f7b5f8d 100644
--- a/stdlib/source/library/lux/data/bit.lux
+++ b/stdlib/source/library/lux/data/bit.lux
@@ -49,12 +49,12 @@
 (implementation: .public codec
   (Codec Text Bit)
   
-  (def: (encode x)
+  (def: (encoded x)
     (if x
       "#1"
       "#0"))
 
-  (def: (decode input)
+  (def: (decoded input)
     (case input
       "#1" (#.Right #1)
       "#0" (#.Right #0)
diff --git a/stdlib/source/library/lux/data/collection/array.lux b/stdlib/source/library/lux/data/collection/array.lux
index c7fe53e3f..4ec5d1612 100644
--- a/stdlib/source/library/lux/data/collection/array.lux
+++ b/stdlib/source/library/lux/data/collection/array.lux
@@ -6,14 +6,14 @@
      [monoid (#+ Monoid)]
      [functor (#+ Functor)]
      [equivalence (#+ Equivalence)]
-     [fold (#+ Fold)]
+     [mix (#+ Mix)]
      [predicate (#+ Predicate)]]
     [control
      ["." maybe]]
     [data
      ["." product]
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      [number
       ["n" nat]]]]])
@@ -178,27 +178,27 @@
         (Array a)))
   (if (n.= 0 length)
     dest_array
-    (list\fold (function (_ offset target)
-                 (case (read! (n.+ offset src_start) src_array)
-                   #.None
-                   target
-                   
-                   (#.Some value)
-                   (write! (n.+ offset dest_start) value target)))
-               dest_array
-               (list.indices length))))
+    (list\mix (function (_ offset target)
+                (case (read! (n.+ offset src_start) src_array)
+                  #.None
+                  target
+                  
+                  (#.Some value)
+                  (write! (n.+ offset dest_start) value target)))
+              dest_array
+              (list.indices length))))
 
 (def: .public (occupancy array)
   (All [a] (-> (Array a) Nat))
-  (list\fold (function (_ idx count)
-               (case (read! idx array)
-                 #.None
-                 count
-                 
-                 (#.Some _)
-                 (++ count)))
-             0
-             (list.indices (size array))))
+  (list\mix (function (_ idx count)
+              (case (read! idx array)
+                #.None
+                count
+                
+                (#.Some _)
+                (++ count)))
+            0
+            (list.indices (size array))))
 
 (def: .public (vacancy array)
   (All [a] (-> (Array a) Nat))
@@ -207,17 +207,17 @@
 (def: .public (filter! p xs)
   (All [a]
     (-> (Predicate a) (Array a) (Array a)))
-  (list\fold (function (_ idx xs')
-               (case (read! idx xs)
-                 #.None
-                 xs'
-
-                 (#.Some x)
-                 (if (p x)
-                   xs'
-                   (delete! idx xs'))))
-             xs
-             (list.indices (size xs))))
+  (list\mix (function (_ idx xs')
+              (case (read! idx xs)
+                #.None
+                xs'
+
+                (#.Some x)
+                (if (p x)
+                  xs'
+                  (delete! idx xs'))))
+            xs
+            (list.indices (size xs))))
 
 (def: .public (example p xs)
   (All [a]
@@ -254,22 +254,22 @@
 (def: .public (clone xs)
   (All [a] (-> (Array a) (Array a)))
   (let [arr_size (size xs)]
-    (list\fold (function (_ idx ys)
-                 (case (read! idx xs)
-                   #.None
-                   ys
+    (list\mix (function (_ idx ys)
+                (case (read! idx xs)
+                  #.None
+                  ys
 
-                   (#.Some x)
-                   (write! idx x ys)))
-               (empty arr_size)
-               (list.indices arr_size))))
+                  (#.Some x)
+                  (write! idx x ys)))
+              (empty arr_size)
+              (list.indices arr_size))))
 
 (def: .public (of_list xs)
   (All [a] (-> (List a) (Array a)))
-  (product.right (list\fold (function (_ x [idx arr])
-                              [(++ idx) (write! idx x arr)])
-                            [0 (empty (list.size xs))]
-                            xs)))
+  (product.right (list\mix (function (_ x [idx arr])
+                             [(++ idx) (write! idx x arr)])
+                           [0 (empty (list.size xs))]
+                           xs)))
 
 (def: underflow
   Nat
@@ -312,19 +312,19 @@
     (let [sxs (size xs)
           sxy (size ys)]
       (and (n.= sxy sxs)
-           (list\fold (function (_ idx prev)
-                        (and prev
-                             (case [(read! idx xs) (read! idx ys)]
-                               [#.None #.None]
-                               true
+           (list\mix (function (_ idx prev)
+                       (and prev
+                            (case [(read! idx xs) (read! idx ys)]
+                              [#.None #.None]
+                              true
 
-                               [(#.Some x) (#.Some y)]
-                               (,\= x y)
+                              [(#.Some x) (#.Some y)]
+                              (,\= x y)
 
-                               _
-                               false)))
-                      true
-                      (list.indices sxs))))))
+                              _
+                              false)))
+                     true
+                     (list.indices sxs))))))
 
 (implementation: .public monoid
   (All [a] (Monoid (Array a)))
@@ -345,21 +345,21 @@
     (let [arr_size (size ma)]
       (if (n.= 0 arr_size)
         (empty arr_size)
-        (list\fold (function (_ idx mb)
-                     (case (read! idx ma)
-                       #.None
-                       mb
-
-                       (#.Some x)
-                       (write! idx (f x) mb)))
-                   (empty arr_size)
-                   (list.indices arr_size))
+        (list\mix (function (_ idx mb)
+                    (case (read! idx ma)
+                      #.None
+                      mb
+
+                      (#.Some x)
+                      (write! idx (f x) mb)))
+                  (empty arr_size)
+                  (list.indices arr_size))
         ))))
 
-(implementation: .public fold
-  (Fold Array)
+(implementation: .public mix
+  (Mix Array)
   
-  (def: (fold f init xs)
+  (def: (mix f init xs)
     (let [arr_size (size xs)]
       (loop [so_far init
              idx 0]
diff --git a/stdlib/source/library/lux/data/collection/bits.lux b/stdlib/source/library/lux/data/collection/bits.lux
index 6c375247c..34e45b10f 100644
--- a/stdlib/source/library/lux/data/collection/bits.lux
+++ b/stdlib/source/library/lux/data/collection/bits.lux
@@ -8,7 +8,7 @@
      ["." maybe]]
     [data
      [collection
-      ["." array (#+ Array) ("#\." fold)]]]
+      ["." array (#+ Array) ("#\." mix)]]]
     [math
      [number
       ["n" nat]
@@ -33,10 +33,10 @@
 
 (def: .public (size bits)
   (-> Bits Nat)
-  (array\fold (function (_ chunk total)
-                (|> chunk i64.ones (n.+ total)))
-              0
-              bits))
+  (array\mix (function (_ chunk total)
+               (|> chunk i64.ones (n.+ total)))
+             0
+             bits))
 
 (def: .public (capacity bits)
   (-> Bits Nat)
diff --git a/stdlib/source/library/lux/data/collection/dictionary.lux b/stdlib/source/library/lux/data/collection/dictionary.lux
index faab0f7b2..afc1cd356 100644
--- a/stdlib/source/library/lux/data/collection/dictionary.lux
+++ b/stdlib/source/library/lux/data/collection/dictionary.lux
@@ -12,8 +12,8 @@
     [data
      ["." product]
      [collection
-      ["." list ("#\." fold functor monoid)]
-      ["." array (#+ Array) ("#\." functor fold)]]]
+      ["." list ("#\." mix functor monoid)]
+      ["." array (#+ Array) ("#\." functor mix)]]]
     [math
      ["." number
       ["n" nat]
@@ -234,19 +234,19 @@
 ... nodes to save space.
 (def: (demotion except_idx [h_size h_array])
   (All [k v] (-> Index (Hierarchy k v) [Bit_Map (Base k v)]))
-  (product.right (list\fold (function (_ idx [insertion_idx node])
-                              (let [[bitmap base] node]
-                                (case (array.read! idx h_array)
-                                  #.None            [insertion_idx node]
-                                  (#.Some sub_node) (if (n.= except_idx idx)
-                                                      [insertion_idx node]
-                                                      [(++ insertion_idx)
-                                                       [(with_bit_position (to_bit_position idx) bitmap)
-                                                        (array.write! insertion_idx (#.Left sub_node) base)]])
-                                  )))
-                            [0 [clean_bitmap
-                                (array.empty (-- h_size))]]
-                            (list.indices (array.size h_array)))))
+  (product.right (list\mix (function (_ idx [insertion_idx node])
+                             (let [[bitmap base] node]
+                               (case (array.read! idx h_array)
+                                 #.None            [insertion_idx node]
+                                 (#.Some sub_node) (if (n.= except_idx idx)
+                                                     [insertion_idx node]
+                                                     [(++ insertion_idx)
+                                                      [(with_bit_position (to_bit_position idx) bitmap)
+                                                       (array.write! insertion_idx (#.Left sub_node) base)]])
+                                 )))
+                           [0 [clean_bitmap
+                               (array.empty (-- h_size))]]
+                           (list.indices (array.size h_array)))))
 
 ... When #Base nodes grow too large, they're promoted to #Hierarchy to
 ... add some depth to the tree and help keep its balance.
@@ -260,25 +260,25 @@
         (Hash k) Level
         Bit_Map (Base k v)
         (Array (Node k v))))
-  (product.right (list\fold (function (_ hierarchy_idx (^@ default [base_idx h_array]))
-                              (if (with_bit_position? (to_bit_position hierarchy_idx)
-                                    bitmap)
-                                [(++ base_idx)
-                                 (case (array.read! base_idx base)
-                                   (#.Some (#.Left sub_node))
-                                   (array.write! hierarchy_idx sub_node h_array)
-
-                                   (#.Some (#.Right [key' val']))
-                                   (array.write! hierarchy_idx
-                                                 (node\has (level_up level) (\ key_hash hash key') key' val' key_hash empty_node)
-                                                 h_array)
-
-                                   #.None
-                                   (undefined))]
-                                default))
-                            [0
-                             (array.empty hierarchy_nodes_size)]
-                            hierarchy_indices)))
+  (product.right (list\mix (function (_ hierarchy_idx (^@ default [base_idx h_array]))
+                             (if (with_bit_position? (to_bit_position hierarchy_idx)
+                                   bitmap)
+                               [(++ base_idx)
+                                (case (array.read! base_idx base)
+                                  (#.Some (#.Left sub_node))
+                                  (array.write! hierarchy_idx sub_node h_array)
+
+                                  (#.Some (#.Right [key' val']))
+                                  (array.write! hierarchy_idx
+                                                (node\has (level_up level) (\ key_hash hash key') key' val' key_hash empty_node)
+                                                h_array)
+
+                                  #.None
+                                  (undefined))]
+                               default))
+                           [0
+                            (array.empty hierarchy_nodes_size)]
+                           hierarchy_indices)))
 
 ... All empty nodes look the same (a #Base node with clean bitmap is
 ... used).
@@ -518,14 +518,14 @@
   (All [k v] (-> (Node k v) Nat))
   (case node
     (#Hierarchy _size hierarchy)
-    (array\fold n.+ 0 (array\map size' hierarchy))
+    (array\mix n.+ 0 (array\map size' hierarchy))
     
     (#Base _ base)
-    (array\fold n.+ 0 (array\map (function (_ sub_node')
-                                   (case sub_node'
-                                     (#.Left sub_node) (size' sub_node)
-                                     (#.Right _)       1))
-                                 base))
+    (array\mix n.+ 0 (array\map (function (_ sub_node')
+                                  (case sub_node'
+                                    (#.Left sub_node) (size' sub_node)
+                                    (#.Right _)       1))
+                                base))
 
     (#Collisions hash colls)
     (array.size colls)
@@ -535,25 +535,25 @@
   (All [k v] (-> (Node k v) (List [k v])))
   (case node
     (#Hierarchy _size hierarchy)
-    (array\fold (function (_ sub_node tail) (list\compose (entries' sub_node) tail))
-                #.End
-                hierarchy)
+    (array\mix (function (_ sub_node tail) (list\compose (entries' sub_node) tail))
+               #.End
+               hierarchy)
 
     (#Base bitmap base)
-    (array\fold (function (_ branch tail)
-                  (case branch
-                    (#.Left sub_node)
-                    (list\compose (entries' sub_node) tail)
-
-                    (#.Right [key' val'])
-                    (#.Item [key' val'] tail)))
-                #.End
-                base)
+    (array\mix (function (_ branch tail)
+                 (case branch
+                   (#.Left sub_node)
+                   (list\compose (entries' sub_node) tail)
+
+                   (#.Right [key' val'])
+                   (#.Item [key' val'] tail)))
+               #.End
+               base)
     
     (#Collisions hash colls)
-    (array\fold (function (_ [key' val'] tail) (#.Item [key' val'] tail))
-                #.End
-                colls)))
+    (array\mix (function (_ [key' val'] tail) (#.Item [key' val'] tail))
+               #.End
+               colls)))
 
 (type: .public (Dictionary k v)
   {#hash (Hash k)
@@ -627,18 +627,18 @@
 
 (def: .public (of_list key_hash kvs)
   (All [k v] (-> (Hash k) (List [k v]) (Dictionary k v)))
-  (list\fold (function (_ [k v] dict)
-               (..has k v dict))
-             (empty key_hash)
-             kvs))
+  (list\mix (function (_ [k v] dict)
+              (..has k v dict))
+            (empty key_hash)
+            kvs))
 
 (template [<side> <name>]
   [(def: .public <name>
      (All [k v] (-> (Dictionary k v) (List <side>)))
      (|>> ..entries
-          (list\fold (function (_ [k v] bundle)
-                       (#.Item <side> bundle))
-                     #.End)))]
+          (list\mix (function (_ [k v] bundle)
+                      (#.Item <side> bundle))
+                    #.End)))]
 
   [k keys]
   [v values]
@@ -646,21 +646,21 @@
 
 (def: .public (merged dict2 dict1)
   (All [k v] (-> (Dictionary k v) (Dictionary k v) (Dictionary k v)))
-  (list\fold (function (_ [key val] dict) (has key val dict))
-             dict1
-             (entries dict2)))
+  (list\mix (function (_ [key val] dict) (has key val dict))
+            dict1
+            (entries dict2)))
 
 (def: .public (merged_with f dict2 dict1)
   (All [k v] (-> (-> v v v) (Dictionary k v) (Dictionary k v) (Dictionary k v)))
-  (list\fold (function (_ [key val2] dict)
-               (case (value key dict)
-                 #.None
-                 (has key val2 dict)
+  (list\mix (function (_ [key val2] dict)
+              (case (value key dict)
+                #.None
+                (has key val2 dict)
 
-                 (#.Some val1)
-                 (has key (f val2 val1) dict)))
-             dict1
-             (entries dict2)))
+                (#.Some val1)
+                (has key (f val2 val1) dict)))
+            dict1
+            (entries dict2)))
 
 (def: .public (re_bound from_key to_key dict)
   (All [k v] (-> k k (Dictionary k v) (Dictionary k v)))
@@ -676,12 +676,12 @@
 (def: .public (sub keys dict)
   (All [k v] (-> (List k) (Dictionary k v) (Dictionary k v)))
   (let [[key_hash _] dict]
-    (list\fold (function (_ key new_dict)
-                 (case (value key dict)
-                   #.None       new_dict
-                   (#.Some val) (has key val new_dict)))
-               (empty key_hash)
-               keys)))
+    (list\mix (function (_ key new_dict)
+                (case (value key dict)
+                  #.None       new_dict
+                  (#.Some val) (has key val new_dict)))
+              (empty key_hash)
+              keys)))
 
 (implementation: .public (equivalence (^open ",\."))
   (All [k v] (-> (Equivalence v) (Equivalence (Dictionary k v))))
diff --git a/stdlib/source/library/lux/data/collection/dictionary/ordered.lux b/stdlib/source/library/lux/data/collection/dictionary/ordered.lux
index f19843db9..49d4068d5 100644
--- a/stdlib/source/library/lux/data/collection/dictionary/ordered.lux
+++ b/stdlib/source/library/lux/data/collection/dictionary/ordered.lux
@@ -10,10 +10,7 @@
     [data
      ["p" product]
      [collection
-      ["." list ("#\." monoid fold)]]]
-    [macro
-     ["." code]
-     ["." template]]
+      ["." list ("#\." monoid mix)]]]
     [math
      [number
       ["n" nat]]]]])
@@ -101,7 +98,6 @@
 
 (template [<name> <side>]
   [(def: .public (<name> dict)
-     {#.doc (example (~~ (template.text ["Yields value under the " <name> "imum key."])))}
      (All [k v] (-> (Dictionary k v) (Maybe v)))
      (case (value@ #root dict)
        #.None
@@ -537,10 +533,10 @@
 
 (def: .public (of_list order list)
   (All [k v] (-> (Order k) (List [k v]) (Dictionary k v)))
-  (list\fold (function (_ [key value] dict)
-               (has key value dict))
-             (empty order)
-             list))
+  (list\mix (function (_ [key value] dict)
+              (has key value dict))
+            (empty order)
+            list))
 
 (template [<name> <type> <output>]
   [(def: .public (<name> dict)
diff --git a/stdlib/source/library/lux/data/collection/list.lux b/stdlib/source/library/lux/data/collection/list.lux
index a4bb340e7..98a3224e4 100644
--- a/stdlib/source/library/lux/data/collection/list.lux
+++ b/stdlib/source/library/lux/data/collection/list.lux
@@ -7,7 +7,7 @@
      [apply (#+ Apply)]
      [equivalence (#+ Equivalence)]
      [hash (#+ Hash)]
-     [fold (#+ Fold)]
+     [mix (#+ Mix)]
      [predicate (#+ Predicate)]
      ["." functor (#+ Functor)]
      ["." monad (#+ do Monad)]
@@ -23,32 +23,32 @@
 ...   #End
 ...   (#Item a (List a)))
 
-(implementation: .public fold
-  (Fold List)
+(implementation: .public mix
+  (Mix List)
   
-  (def: (fold f init xs)
+  (def: (mix f init xs)
     (case xs
       #.End
       init
 
       (#.Item x xs')
-      (fold f (f x init) xs'))))
+      (mix f (f x init) xs'))))
 
-(def: .public (aggregates f init inputs)
+(def: .public (mixes f init inputs)
   (All [a b] (-> (-> a b b) b (List a) (List b)))
   (case inputs
     #.End
     (list init)
     
     (#.Item [head tail])
-    (#.Item [init (aggregates f (f head init) tail)])))
+    (#.Item [init (mixes f (f head init) tail)])))
 
 (def: .public (reversed xs)
   (All [a]
     (-> (List a) (List a)))
-  (fold (function (_ head tail) (#.Item head tail))
-        #.End
-        xs))
+  (mix (function (_ head tail) (#.Item head tail))
+       #.End
+       xs))
 
 (def: .public (only keep? xs)
   (All [a]
@@ -205,15 +205,15 @@
     (-> (-> a (Maybe b)) (List a) (List b)))
   (for {... TODO: Stop relying on this ASAP.
         @.js
-        (fold (function (_ head tail)
-                (case (check head)
-                  (#.Some head)
-                  (#.Item head tail)
-                  
-                  #.None
-                  tail))
-              #.End
-              (reversed xs))}
+        (mix (function (_ head tail)
+               (case (check head)
+                 (#.Some head)
+                 (#.Item head tail)
+                 
+                 #.None
+                 tail))
+             #.End
+             (reversed xs))}
        (case xs
          #.End
          #.End
@@ -250,7 +250,7 @@
 
 (def: .public (size list)
   (All [a] (-> (List a) Nat))
-  (fold (function (_ _ acc) (n.+ 1 acc)) 0 list))
+  (mix (function (_ _ acc) (n.+ 1 acc)) 0 list))
 
 (template [<name> <init> <op>]
   [(def: .public (<name> predicate items)
@@ -303,7 +303,7 @@
     (..equivalence (\ super &equivalence)))
   
   (def: hash
-    (\ ..fold fold
+    (\ ..mix mix
        (function (_ member hash)
          (n.+ (\ super hash member) hash))
        0)))
@@ -340,13 +340,15 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (case ff
       #.End
       #.End
       
       (#.Item f ff')
-      (compose (map f fa) (apply ff' fa)))))
+      (|> ff'
+          (on fa)
+          (compose (map f fa))))))
 
 (implementation: .public monad
   (Monad List)
@@ -357,7 +359,7 @@
     (#.Item a #.End))
 
   (def: join
-    (|>> reversed (fold compose identity))))
+    (|>> reversed (mix compose identity))))
 
 (def: .public (sorted < xs)
   (All [a] (-> (-> a a Bit) (List a) (List a)))
@@ -366,12 +368,12 @@
     (list)
     
     (#.Item x xs')
-    (let [[pre post] (fold (function (_ x' [pre post])
-                             (if (< x x')
-                               [(#.Item x' pre) post]
-                               [pre (#.Item x' post)]))
-                           [(list) (list)]
-                           xs')]
+    (let [[pre post] (mix (function (_ x' [pre post])
+                            (if (< x x')
+                              [(#.Item x' pre) post]
+                              [pre (#.Item x' post)]))
+                          [(list) (list)]
+                          xs')]
       ($_ compose (sorted < pre) (list x) (sorted < post)))))
 
 (def: .public (empty? xs)
@@ -393,9 +395,8 @@
     (or (\ eq = x x')
         (member? eq xs' x))))
 
-(template [<name> <output> <side> <doc>]
+(template [<name> <output> <side>]
   [(def: .public (<name> xs)
-     {#.doc <doc>}
      (All [a] (-> (List a) (Maybe <output>)))
      (case xs
        #.End
@@ -404,8 +405,8 @@
        (#.Item x xs')
        (#.Some <side>)))]
 
-  [head a        x   "Yields the first element of a list."]
-  [tail (List a) xs' "For a list of size N, yields the N-1 elements after the first one."]
+  [head a        x]
+  [tail (List a) xs']
   )
 
 (def: .public (indices size)
@@ -418,7 +419,7 @@
   (-> Text Code)
   [["" 0 0] (#.Identifier "" name)])
 
-(def: (nat\encode value)
+(def: (nat\encoded value)
   (-> Nat Text)
   (loop [input value
          output ""]
@@ -446,7 +447,7 @@
     (if (n.> 0 num_lists)
       (let [(^open ".") ..functor
             indices (..indices num_lists)
-            type_vars (: (List Code) (map (|>> nat\encode identifier$) indices))
+            type_vars (: (List Code) (map (|>> nat\encoded identifier$) indices))
             zipped_type (` (All [(~+ type_vars)]
                              (-> (~+ (map (: (-> Code Code) (function (_ var) (` (List (~ var)))))
                                           type_vars))
@@ -454,7 +455,7 @@
             vars+lists (|> indices
                            (map ++)
                            (map (function (_ idx)
-                                  (let [base (nat\encode idx)]
+                                  (let [base (nat\encoded idx)]
                                     [(identifier$ base)
                                      (identifier$ ("lux text concat" base "'"))]))))
             pattern (` [(~+ (map (function (_ [v vs]) (` (#.Item (~ v) (~ vs))))
@@ -488,7 +489,7 @@
             indices (..indices num_lists)
             g!return_type (identifier$ "0return_type0")
             g!func (identifier$ "0func0")
-            type_vars (: (List Code) (map (|>> nat\encode identifier$) indices))
+            type_vars (: (List Code) (map (|>> nat\encoded identifier$) indices))
             zipped_type (` (All [(~+ type_vars) (~ g!return_type)]
                              (-> (-> (~+ type_vars) (~ g!return_type))
                                  (~+ (map (: (-> Code Code) (function (_ var) (` (List (~ var)))))
@@ -497,7 +498,7 @@
             vars+lists (|> indices
                            (map ++)
                            (map (function (_ idx)
-                                  (let [base (nat\encode idx)]
+                                  (let [base (nat\encoded idx)]
                                     [(identifier$ base)
                                      (identifier$ ("lux text concat" base "'"))]))))
             pattern (` [(~+ (map (function (_ [v vs]) (` (#.Item (~ v) (~ vs))))
diff --git a/stdlib/source/library/lux/data/collection/row.lux b/stdlib/source/library/lux/data/collection/row.lux
index 16929459e..d7a792cdc 100644
--- a/stdlib/source/library/lux/data/collection/row.lux
+++ b/stdlib/source/library/lux/data/collection/row.lux
@@ -11,7 +11,7 @@
      [monad (#+ Monad do)]
      [equivalence (#+ Equivalence)]
      [monoid (#+ Monoid)]
-     [fold (#+ Fold)]
+     [mix (#+ Mix)]
      [predicate (#+ Predicate)]]
     [control
      ["." maybe]
@@ -22,8 +22,8 @@
     [data
      ["." product]
      [collection
-      ["." list ("#\." fold functor monoid)]
-      ["." array (#+ Array) ("#\." functor fold)]]]
+      ["." list ("#\." mix functor monoid)]
+      ["." array (#+ Array) ("#\." functor mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." code]]
@@ -179,8 +179,8 @@
     (|> hierarchy
         array.list
         list.reversed
-        (list\fold (function (_ sub acc) (list\compose (list' sub) acc))
-                   #.End))))
+        (list\mix (function (_ sub acc) (list\compose (list' sub) acc))
+                  #.End))))
 
 (type: .public (Row a)
   {#level Level
@@ -235,8 +235,8 @@
 (exception: incorrect_row_structure)
 
 (exception: .public [a] (index_out_of_bounds {row (Row a)} {index Nat})
-  (exception.report ["Size" (\ n.decimal encode (value@ #size row))]
-                    ["Index" (\ n.decimal encode index)]))
+  (exception.report ["Size" (\ n.decimal encoded (value@ #size row))]
+                    ["Index" (\ n.decimal encoded index)]))
 
 (exception: base_was_not_found)
 
@@ -346,7 +346,7 @@
 
 (def: .public of_list
   (All [a] (-> (List a) (Row a)))
-  (list\fold ..suffix ..empty))
+  (list\mix ..suffix ..empty))
 
 (def: .public (member? equivalence row val)
   (All [a] (-> (Equivalence a) (Row a) a Bit))
@@ -384,29 +384,29 @@
                 (node\= (#Hierarchy (value@ #root v1))
                         (#Hierarchy (value@ #root v2))))))))
 
-(implementation: node_fold
-  (Fold Node)
+(implementation: node_mix
+  (Mix Node)
   
-  (def: (fold f init xs)
+  (def: (mix f init xs)
     (case xs
       (#Base base)
-      (array\fold f init base)
+      (array\mix f init base)
       
       (#Hierarchy hierarchy)
-      (array\fold (function (_ node init') (fold f init' node))
-                  init
-                  hierarchy))))
+      (array\mix (function (_ node init') (mix f init' node))
+                 init
+                 hierarchy))))
 
-(implementation: .public fold
-  (Fold Row)
+(implementation: .public mix
+  (Mix Row)
   
-  (def: (fold f init xs)
-    (let [(^open ".") node_fold]
-      (fold f
-            (fold f
-                  init
-                  (#Hierarchy (value@ #root xs)))
-            (#Base (value@ #tail xs))))))
+  (def: (mix f init xs)
+    (let [(^open ".") node_mix]
+      (mix f
+           (mix f
+                init
+                (#Hierarchy (value@ #root xs)))
+           (#Base (value@ #tail xs))))))
 
 (implementation: .public monoid
   (All [a] (Monoid (Row a)))
@@ -414,7 +414,7 @@
   (def: identity ..empty)
   
   (def: (compose xs ys)
-    (list\fold suffix xs (..list ys))))
+    (list\mix suffix xs (..list ys))))
 
 (implementation: node_functor
   (Functor Node)
@@ -441,13 +441,13 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (let [(^open ".") ..functor
-          (^open ".") ..fold
+          (^open ".") ..mix
           (^open ".") ..monoid
           results (map (function (_ f) (map f fa))
                        ff)]
-      (fold compose identity results))))
+      (mix compose identity results))))
 
 (implementation: .public monad
   (Monad Row)
@@ -457,15 +457,15 @@
   (def: in (|>> row))
 
   (def: join
-    (let [(^open ".") ..fold
+    (let [(^open ".") ..mix
           (^open ".") ..monoid]
-      (fold (function (_ post pre) (compose pre post)) identity))))
+      (mix (function (_ post pre) (compose pre post)) identity))))
 
 (def: .public reversed
   (All [a] (-> (Row a) (Row a)))
   (|>> ..list
        list.reversed
-       (list\fold suffix ..empty)))
+       (list\mix suffix ..empty)))
 
 (template [<name> <array> <init> <op>]
   [(def: .public <name>
diff --git a/stdlib/source/library/lux/data/collection/set.lux b/stdlib/source/library/lux/data/collection/set.lux
index bd18afe96..00edc5a47 100644
--- a/stdlib/source/library/lux/data/collection/set.lux
+++ b/stdlib/source/library/lux/data/collection/set.lux
@@ -8,7 +8,7 @@
      [monoid (#+ Monoid)]]
     [data
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      [number
       ["n" nat]]]]]
@@ -16,8 +16,6 @@
    ["#" dictionary (#+ Dictionary)]])
 
 (type: .public (Set a)
-  {#.doc (example "An un-ordered data-structure with unique items."
-                  "This means there is no repetition/duplication among the items.")}
   (Dictionary a Any))
 
 (def: .public member_hash
@@ -54,7 +52,7 @@
 
 (def: .public (difference sub base)
   (All [a] (-> (Set a) (Set a) (Set a)))
-  (list\fold ..lacks base (..list sub)))
+  (list\mix ..lacks base (..list sub)))
 
 (def: .public (intersection filter base)
   (All [a] (-> (Set a) (Set a) (Set a)))
@@ -92,7 +90,7 @@
 
 (def: .public (of_list hash elements)
   (All [a] (-> (Hash a) (List a) (Set a)))
-  (list\fold ..has (..empty hash) elements))
+  (list\mix ..has (..empty hash) elements))
 
 (def: .public (sub? super sub)
   (All [a] (-> (Set a) (Set a) Bit))
diff --git a/stdlib/source/library/lux/data/collection/set/multi.lux b/stdlib/source/library/lux/data/collection/set/multi.lux
index b4786c825..f176dc46a 100644
--- a/stdlib/source/library/lux/data/collection/set/multi.lux
+++ b/stdlib/source/library/lux/data/collection/set/multi.lux
@@ -15,7 +15,7 @@
      [abstract (#+ abstract: :abstraction :representation ^:representation)]]]]
   ["." //
    [//
-    ["." list ("#\." fold monoid)]
+    ["." list ("#\." mix monoid)]
     ["." dictionary (#+ Dictionary)]]])
 
 (abstract: .public (Set a)
@@ -29,7 +29,7 @@
 
   (def: .public size
     (All [a] (-> (Set a) Nat))
-    (|>> :representation dictionary.values (list\fold n.+ 0)))
+    (|>> :representation dictionary.values (list\mix n.+ 0)))
 
   (def: .public (has multiplicity elem set)
     (All [a] (-> Nat a (Set a) (Set a)))
@@ -62,9 +62,9 @@
     (All [a] (-> (Set a) (List a)))
     (|>> :representation
          dictionary.entries
-         (list\fold (function (_ [elem multiplicity] output)
-                      (list\compose (list.repeated multiplicity elem) output))
-                    #.End)))
+         (list\mix (function (_ [elem multiplicity] output)
+                     (list\compose (list.repeated multiplicity elem) output))
+                   #.End)))
 
   (template [<name> <compose>]
     [(def: .public (<name> parameter subject)
@@ -77,22 +77,22 @@
 
   (def: .public (intersection parameter (^:representation subject))
     (All [a] (-> (Set a) (Set a) (Set a)))
-    (list\fold (function (_ [elem multiplicity] output)
-                 (..has (n.min (..multiplicity parameter elem)
-                               multiplicity)
-                        elem
-                        output))
-               (..empty (dictionary.key_hash subject))
-               (dictionary.entries subject)))
+    (list\mix (function (_ [elem multiplicity] output)
+                (..has (n.min (..multiplicity parameter elem)
+                              multiplicity)
+                       elem
+                       output))
+              (..empty (dictionary.key_hash subject))
+              (dictionary.entries subject)))
 
   (def: .public (difference parameter subject)
     (All [a] (-> (Set a) (Set a) (Set a)))
     (|> parameter
         :representation
         dictionary.entries
-        (list\fold (function (_ [elem multiplicity] output)
-                     (..lacks multiplicity elem output))
-                   subject)))
+        (list\mix (function (_ [elem multiplicity] output)
+                    (..lacks multiplicity elem output))
+                  subject)))
 
   (def: .public (sub? reference subject)
     {#.doc (example "Is 'subject' a sub-set of 'reference'?")}
@@ -133,10 +133,10 @@
     
     (def: (hash (^:representation set))
       (let [[hash _] set]
-        (list\fold (function (_ [elem multiplicity] acc)
-                     (|> elem (\ hash hash) (n.* multiplicity) (n.+ acc)))
-                   0
-                   (dictionary.entries set)))))
+        (list\mix (function (_ [elem multiplicity] acc)
+                    (|> elem (\ hash hash) (n.* multiplicity) (n.+ acc)))
+                  0
+                  (dictionary.entries set)))))
   )
 
 (def: .public (member? set elem)
@@ -149,7 +149,7 @@
 
 (def: .public (of_list hash subject)
   (All [a] (-> (Hash a) (List a) (Set a)))
-  (list\fold (..has 1) (..empty hash) subject))
+  (list\mix (..has 1) (..empty hash) subject))
 
 (def: .public (of_set subject)
   (All [a] (-> (//.Set a) (Set a)))
diff --git a/stdlib/source/library/lux/data/collection/set/ordered.lux b/stdlib/source/library/lux/data/collection/set/ordered.lux
index 28bbf1876..d6d532d02 100644
--- a/stdlib/source/library/lux/data/collection/set/ordered.lux
+++ b/stdlib/source/library/lux/data/collection/set/ordered.lux
@@ -6,7 +6,7 @@
      [order (#+ Order)]]
     [data
      [collection
-      ["." list ("#\." fold)]
+      ["." list ("#\." mix)]
       [dictionary
        ["/" ordered]]]]
     [type
@@ -50,11 +50,11 @@
 
   (def: .public (of_list &order list)
     (All [a] (-> (Order a) (List a) (Set a)))
-    (list\fold has (..empty &order) list))
+    (list\mix has (..empty &order) list))
 
   (def: .public (union left right)
     (All [a] (-> (Set a) (Set a) (Set a)))
-    (list\fold ..has right (..list left)))
+    (list\mix ..has right (..list left)))
 
   (def: .public (intersection left right)
     (All [a] (-> (Set a) (Set a) (Set a)))
diff --git a/stdlib/source/library/lux/data/collection/tree.lux b/stdlib/source/library/lux/data/collection/tree.lux
index 112932a50..bdf10e85b 100644
--- a/stdlib/source/library/lux/data/collection/tree.lux
+++ b/stdlib/source/library/lux/data/collection/tree.lux
@@ -4,14 +4,14 @@
     [abstract
      [functor (#+ Functor)]
      [equivalence (#+ Equivalence)]
-     [fold (#+ Fold)]
+     [mix (#+ Mix)]
      [monad (#+ do)]]
     [control
      ["<>" parser
       ["<.>" code (#+ Parser)]]]
     [data
      [collection
-      ["." list ("#\." monad fold)]]]
+      ["." list ("#\." monad mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." code]]]])
@@ -80,11 +80,11 @@
      #children (list\map (map f)
                          (value@ #children fa))}))
 
-(implementation: .public fold
-  (Fold Tree)
+(implementation: .public mix
+  (Mix Tree)
   
-  (def: (fold f init tree)
-    (list\fold (function (_ tree' init') (fold f init' tree'))
-               (f (value@ #value tree)
-                  init)
-               (value@ #children tree))))
+  (def: (mix f init tree)
+    (list\mix (function (_ tree' init') (mix f init' tree'))
+              (f (value@ #value tree)
+                 init)
+              (value@ #children tree))))
diff --git a/stdlib/source/library/lux/data/collection/tree/zipper.lux b/stdlib/source/library/lux/data/collection/tree/zipper.lux
index 6d1709c55..1c99353bc 100644
--- a/stdlib/source/library/lux/data/collection/tree/zipper.lux
+++ b/stdlib/source/library/lux/data/collection/tree/zipper.lux
@@ -14,7 +14,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold monoid)]]]]]
+      ["." list ("#\." functor monoid)]]]]]
   ["." // (#+ Tree) ("#\." functor)])
 
 (type: (Family Zipper a)
diff --git a/stdlib/source/library/lux/data/color.lux b/stdlib/source/library/lux/data/color.lux
index d34918cf2..fb67c971f 100644
--- a/stdlib/source/library/lux/data/color.lux
+++ b/stdlib/source/library/lux/data/color.lux
@@ -9,14 +9,8 @@
      [parser
       ["<.>" code]]]
     [data
-     ["." text
-      ["%" format (#+ format)]]
      [collection
       ["." list ("#\." functor)]]]
-    [macro
-     [syntax (#+ syntax:)]
-     ["." template]
-     ["." code]]
     ["." math
      [number
       ["n" nat]
@@ -355,14 +349,8 @@
              +0.0
              luminance])))
 
-(syntax: (color_scheme_documentation [name <code>.local_identifier])
-  (let [name (text.replaced "_" "-" name)
-        g!documentation (code.text (format "A " name " color scheme."))]
-    (in (list (` {#.doc (.example (~ g!documentation))})))))
-
 (template [<name> <1> <2>]
   [(`` (def: .public (<name> color)
-         (~~ (..color_scheme_documentation <name>))
          (-> Color [Color Color Color])
          (let [[hue saturation luminance] (hsl color)]
            [color
@@ -380,7 +368,6 @@
 
 (template [<name> <1> <2> <3>]
   [(`` (def: .public (<name> color)
-         (~~ (..color_scheme_documentation <name>))
          (-> Color [Color Color Color Color])
          (let [[hue saturation luminance] (hsb color)]
            [color
diff --git a/stdlib/source/library/lux/data/color/named.lux b/stdlib/source/library/lux/data/color/named.lux
index 5e5e5bc65..43fd25f16 100644
--- a/stdlib/source/library/lux/data/color/named.lux
+++ b/stdlib/source/library/lux/data/color/named.lux
@@ -7,7 +7,6 @@
 
 (template [<red> <green> <blue> <name>]
   [(`` (def: .public <name>
-         {#.doc (example (~~ (..documentation <red> <green> <blue> <name>)))}
          Color
          (//.of_rgb {#//.red (hex <red>)
                      #//.green (hex <green>)
diff --git a/stdlib/source/library/lux/data/format/binary.lux b/stdlib/source/library/lux/data/format/binary.lux
index bb0510528..85eb0534d 100644
--- a/stdlib/source/library/lux/data/format/binary.lux
+++ b/stdlib/source/library/lux/data/format/binary.lux
@@ -165,7 +165,7 @@
 (template [<name> <binary>]
   [(def: .public <name>
      (Writer Text)
-     (|>> (\ utf8.codec encode) <binary>))]
+     (|>> (\ utf8.codec encoded) <binary>))]
 
   [utf8/8  ..binary/8]
   [utf8/16 ..binary/16]
@@ -188,7 +188,7 @@
              (^open "specification\.") ..monoid
              [size mutation] (|> value
                                  (row\map valueW)
-                                 (\ row.fold fold
+                                 (\ row.mix mix
                                     (function (_ post pre)
                                       (specification\compose pre post))
                                     specification\identity))]
diff --git a/stdlib/source/library/lux/data/format/css.lux b/stdlib/source/library/lux/data/format/css.lux
index 8b3a9270c..75e886e0d 100644
--- a/stdlib/source/library/lux/data/format/css.lux
+++ b/stdlib/source/library/lux/data/format/css.lux
@@ -53,8 +53,8 @@
     (-> Font (CSS Special))
     (let [with_unicode (case (value@ #/font.unicode_range font)
                          (#.Some unicode_range)
-                         (let [unicode_range' (format "U+" (\ nat.hex encode (value@ #/font.start unicode_range))
-                                                      "-" (\ nat.hex encode (value@ #/font.end unicode_range)))]
+                         (let [unicode_range' (format "U+" (\ nat.hex encoded (value@ #/font.start unicode_range))
+                                                      "-" (\ nat.hex encoded (value@ #/font.end unicode_range)))]
                            (list ["unicode-range" unicode_range']))
                          
                          #.None
diff --git a/stdlib/source/library/lux/data/format/html.lux b/stdlib/source/library/lux/data/format/html.lux
index 3a8daf5c0..5bb422c0d 100644
--- a/stdlib/source/library/lux/data/format/html.lux
+++ b/stdlib/source/library/lux/data/format/html.lux
@@ -9,7 +9,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [type
      abstract]
     [host
@@ -219,7 +219,7 @@
   (def: .public (svg attributes content)
     (-> Attributes XML Element)
     (|> content
-        (\ xml.codec encode)
+        (\ xml.codec encoded)
         (..raw "svg" attributes)))
 
   (type: .public Coord
@@ -300,7 +300,7 @@
           
           (#.Item head tail)
           (..tag "map" attributes
-                 (list\fold (function.flipped ..and) head tail)))))
+                 (list\mix (function.flipped ..and) head tail)))))
 
   (template [<name> <tag> <type>]
     [(def: .public <name>
@@ -465,7 +465,7 @@
       
       (#.Item head tail)
       (..tag "dl" attributes
-             (list\fold (function.flipped ..and) head tail))))
+             (list\mix (function.flipped ..and) head tail))))
 
   (def: .public p ..paragraph)
 
@@ -524,7 +524,7 @@
                     (#.Item first rest)
                     (..and head
                            (..table_body
-                            (list\fold (function.flipped ..and) first rest))))
+                            (list\mix (function.flipped ..and) first rest))))
           content (case footer
                     #.None
                     content
diff --git a/stdlib/source/library/lux/data/format/json.lux b/stdlib/source/library/lux/data/format/json.lux
index ed2643efa..bcfd44f80 100644
--- a/stdlib/source/library/lux/data/format/json.lux
+++ b/stdlib/source/library/lux/data/format/json.lux
@@ -19,7 +19,7 @@
      ["." product]
      ["." text ("#\." equivalence monoid)]
      [collection
-      ["." list ("#\." fold functor)]
+      ["." list ("#\." mix functor)]
       ["." row (#+ Row row) ("#\." monad)]
       ["." dictionary (#+ Dictionary)]]]
     [macro
@@ -169,25 +169,25 @@
 
       [(#Array xs) (#Array ys)]
       (and (n.= (row.size xs) (row.size ys))
-           (list\fold (function (_ idx prev)
-                        (and prev
-                             (maybe.else #0
-                                         (do maybe.monad
-                                           [x' (row.item idx xs)
-                                            y' (row.item idx ys)]
-                                           (in (= x' y'))))))
-                      #1
-                      (list.indices (row.size xs))))
+           (list\mix (function (_ idx prev)
+                       (and prev
+                            (maybe.else #0
+                                        (do maybe.monad
+                                          [x' (row.item idx xs)
+                                           y' (row.item idx ys)]
+                                          (in (= x' y'))))))
+                     #1
+                     (list.indices (row.size xs))))
       
       [(#Object xs) (#Object ys)]
       (and (n.= (dictionary.size xs) (dictionary.size ys))
-           (list\fold (function (_ [xk xv] prev)
-                        (and prev
-                             (case (dictionary.value xk ys)
-                               #.None   #0
-                               (#.Some yv) (= xv yv))))
-                      #1
-                      (dictionary.entries xs)))
+           (list\mix (function (_ [xk xv] prev)
+                       (and prev
+                            (case (dictionary.value xk ys)
+                              #.None   #0
+                              (#.Some yv) (= xv yv))))
+                     #1
+                     (dictionary.entries xs)))
       
       _
       #0)))
@@ -210,7 +210,7 @@
   (-> Number Text)
   (|>> (case>
         (^or +0.0 -0.0) "0.0"
-        value (let [raw (\ f.decimal encode value)]
+        value (let [raw (\ f.decimal encoded value)]
                 (if (f.< +0.0 value)
                   raw
                   (|> raw (text.split_at 1) maybe.trusted product.right))))))
@@ -327,7 +327,7 @@
                      signed?' (<>.parses? (<text>.this "-"))
                      offset (<text>.many <text>.decimal)]
                     (in ($_ text\compose mark (if signed?' "-" "") offset))))]
-    (case (f\decode ($_ text\compose (if signed? "-" "") digits "." decimals exp))
+    (case (f\decoded ($_ text\compose (if signed? "-" "") digits "." decimals exp))
       (#try.Failure message)
       (<>.failure message)
       
@@ -406,5 +406,5 @@
 (implementation: .public codec
   (Codec Text JSON)
   
-  (def: encode ..format)
-  (def: decode (<text>.result json_parser)))
+  (def: encoded ..format)
+  (def: decoded (<text>.result json_parser)))
diff --git a/stdlib/source/library/lux/data/format/tar.lux b/stdlib/source/library/lux/data/format/tar.lux
index 59a24a875..f452a2693 100644
--- a/stdlib/source/library/lux/data/format/tar.lux
+++ b/stdlib/source/library/lux/data/format/tar.lux
@@ -19,8 +19,8 @@
      ["." format #_
       ["#" binary (#+ Writer) ("#\." monoid)]]
      [collection
-      ["." list ("#\." fold)]
-      ["." row (#+ Row) ("#\." fold)]]]
+      ["." list ("#\." mix)]
+      ["." row (#+ Row) ("#\." mix)]]]
     [math
      ["." number
       ["n" nat]
@@ -62,7 +62,7 @@
      Nat
      (|> ..octal_size
          (list.repeated <size>)
-         (list\fold n.* 1)
+         (list\mix n.* 1)
          ++))
 
    (exception: .public (<exception> {value Nat})
@@ -90,10 +90,10 @@
        (let [suffix <suffix>
              padded_size (n.+ (text.size suffix) <size>)]
          (|>> :representation
-              (\ n.octal encode)
+              (\ n.octal encoded)
               (..octal_padding <size>)
               (text.suffix suffix)
-              (\ utf8.codec encode)
+              (\ utf8.codec encoded)
               (format.segment padded_size))))
 
      (def: <coercion>
@@ -134,25 +134,25 @@
   (Parser Small)
   (do <>.monad
     [digits (<binary>.segment ..small_size)
-     digits (<>.lifted (\ utf8.codec decode digits))
+     digits (<>.lifted (\ utf8.codec decoded digits))
      _ ..small_suffix]
     (<>.lifted
      (do {! try.monad}
-       [value (\ n.octal decode digits)]
+       [value (\ n.octal decoded digits)]
        (..small value)))))
 
 (def: big_parser
   (Parser Big)
   (do <>.monad
     [digits (<binary>.segment ..big_size)
-     digits (<>.lifted (\ utf8.codec decode digits))
+     digits (<>.lifted (\ utf8.codec decoded digits))
      end <binary>.bits/8
      _ (let [expected (`` (char (~~ (static ..blank))))]
          (<>.assertion (exception.error ..wrong_character [expected end])
                        (n.= expected end)))]
     (<>.lifted
      (do {! try.monad}
-       [value (\ n.octal decode digits)]
+       [value (\ n.octal decoded digits)]
        (..big value)))))
 
 (abstract: Checksum
@@ -178,7 +178,7 @@
   (def: checksum_checksum
     (|> ..dummy_checksum
         :representation
-        (\ utf8.codec encode)
+        (\ utf8.codec encoded)
         ..checksum))
 
   (def: checksum_code
@@ -186,7 +186,7 @@
     (|>> ..checksum
          ..as_small
          ..from_small
-         (\ n.octal encode)
+         (\ n.octal encoded)
          (..octal_padding ..small_size)
          (text.suffix ..checksum_suffix)
          :abstraction))
@@ -196,17 +196,17 @@
     (let [padded_size (n.+ (text.size ..checksum_suffix)
                            ..small_size)]
       (|>> :representation
-           (\ utf8.codec encode)
+           (\ utf8.codec encoded)
            (format.segment padded_size))))
 
   (def: checksum_parser
     (Parser [Nat Checksum])
     (do <>.monad
       [ascii (<binary>.segment ..small_size)
-       digits (<>.lifted (\ utf8.codec decode ascii))
+       digits (<>.lifted (\ utf8.codec decoded ascii))
        _ ..small_suffix
        value (<>.lifted
-              (\ n.octal decode digits))]
+              (\ n.octal decoded digits))]
       (in [value
            (:abstraction (format digits ..checksum_suffix))])))
   )
@@ -217,7 +217,7 @@
 
 (def: ascii?
   (-> Text Bit)
-  (|>> (\ utf8.codec encode)
+  (|>> (\ utf8.codec encoded)
        (binary.aggregate (function (_ char verdict)
                            (.and verdict
                                  (n.<= ..last_ascii char)))
@@ -236,7 +236,7 @@
     0 (#try.Success string)
     size (loop [end (-- size)]
            (case end
-             0 (#try.Success (\ utf8.codec encode ""))
+             0 (#try.Success (\ utf8.codec encoded ""))
              _ (do try.monad
                  [last_char (binary.read/8! end string)]
                  (`` (case (.nat last_char)
@@ -261,7 +261,7 @@
      (def: .public (<in> value)
        (-> <representation> (Try <type>))
        (if (..ascii? value)
-         (if (|> value (\ utf8.codec encode) binary.size (n.<= <size>))
+         (if (|> value (\ utf8.codec encoded) binary.size (n.<= <size>))
            (#try.Success (:abstraction value))
            (exception.except <exception> [value]))
          (exception.except ..not_ascii [value])))
@@ -276,7 +276,7 @@
              padded_size (n.+ (text.size suffix) <size>)]
          (|>> :representation
               (text.suffix suffix)
-              (\ utf8.codec encode)
+              (\ utf8.codec encoded)
               (format.segment padded_size))))
 
      (def: <parser>
@@ -290,7 +290,7 @@
          (<>.lifted
           (do {! try.monad}
             [ascii (..un_padded string)
-             text (\ utf8.codec decode ascii)]
+             text (\ utf8.codec decoded ascii)]
             (<in> text)))))
 
      (def: .public <none>
@@ -320,7 +320,7 @@
     (let [padded_size (n.+ (text.size ..null)
                            ..magic_size)]
       (|>> :representation
-           (\ utf8.codec encode)
+           (\ utf8.codec encoded)
            (format.segment padded_size))))
 
   (def: magic_parser
@@ -333,7 +333,7 @@
                        (n.= expected end))]
       (<>.lifted
        (\ try.monad map (|>> :abstraction)
-          (\ utf8.codec decode string)))))
+          (\ utf8.codec decoded string)))))
   )
 
 (def: block_size Size 512)
@@ -530,7 +530,7 @@
   Nat
   (|> ..octal_size
       (list.repeated ..content_size)
-      (list\fold n.* 1)))
+      (list\mix n.* 1)))
 
 (abstract: .public Content
   {}
@@ -739,10 +739,10 @@
   (Writer Tar)
   (let [end_of_archive (binary.empty ..end_of_archive_size)]
     (function (_ tar)
-      (format\compose (row\fold (function (_ next total)
-                                  (format\compose total (..entry_writer next)))
-                                format\identity
-                                tar)
+      (format\compose (row\mix (function (_ next total)
+                                 (format\compose total (..entry_writer next)))
+                               format\identity
+                               tar)
                       (format.segment ..end_of_archive_size end_of_archive)))))
 
 (exception: .public (wrong_checksum {expected Nat} {actual Nat})
@@ -763,7 +763,7 @@
   (-> Checksum Binary Nat)
   (let [|checksum| (|> checksum
                        ..from_checksum
-                       (\ utf8.codec encode)
+                       (\ utf8.codec encoded)
                        ..checksum)]
     (|> (..checksum header)
         (n.- |checksum|)
diff --git a/stdlib/source/library/lux/data/format/xml.lux b/stdlib/source/library/lux/data/format/xml.lux
index 4e358f91d..064476a7f 100644
--- a/stdlib/source/library/lux/data/format/xml.lux
+++ b/stdlib/source/library/lux/data/format/xml.lux
@@ -127,8 +127,8 @@
                 (<>.after (<text>.this "/"))
                 (<text>.enclosed ["<" ">"]))]
     (<>.assertion ($_ text\compose "Close tag does not match open tag." text.new_line
-                      "Expected: " (name\encode expected) text.new_line
-                      "  Actual: " (name\encode actual) text.new_line)
+                      "Expected: " (name\encoded expected) text.new_line
+                      "  Actual: " (name\encoded actual) text.new_line)
                   (name\= expected actual))))
 
 (def: comment^
@@ -229,7 +229,7 @@
 (implementation: .public codec
   (Codec Text XML)
   
-  (def: encode
+  (def: encoded
     (let [attributes (: (-> Attrs Text)
                         (function (_ attrs)
                           (|> attrs
@@ -269,7 +269,7 @@
                             text.together)
                         text.new_line prefix "</" tag ">")))))
             ))))
-  (def: decode
+  (def: decoded
     (<text>.result ..xml^)))
 
 (implementation: .public equivalence
diff --git a/stdlib/source/library/lux/data/identity.lux b/stdlib/source/library/lux/data/identity.lux
index 72ae09d38..300c0cd7b 100644
--- a/stdlib/source/library/lux/data/identity.lux
+++ b/stdlib/source/library/lux/data/identity.lux
@@ -21,7 +21,8 @@
   (Apply Identity)
 
   (def: &functor ..functor)
-  (def: (apply ff fa) (ff fa)))
+  (def: (on fa ff)
+    (ff fa)))
 
 (implementation: .public monad
   (Monad Identity)
diff --git a/stdlib/source/library/lux/data/name.lux b/stdlib/source/library/lux/data/name.lux
index 3dfa6dcce..99d158095 100644
--- a/stdlib/source/library/lux/data/name.lux
+++ b/stdlib/source/library/lux/data/name.lux
@@ -45,12 +45,12 @@
 (implementation: .public codec
   (Codec Text Name)
   
-  (def: (encode [module short])
+  (def: (encoded [module short])
     (case module
       "" short
       _ ($_ text\compose module ..separator short)))
   
-  (def: (decode input)
+  (def: (decoded input)
     (case (text.all_split_by ..separator input)
       (^ (list short))
       (#.Right ["" short])
diff --git a/stdlib/source/library/lux/data/product.lux b/stdlib/source/library/lux/data/product.lux
index 9a3bf40dc..1e0bc9c96 100644
--- a/stdlib/source/library/lux/data/product.lux
+++ b/stdlib/source/library/lux/data/product.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Functionality for working with tuples (particularly 2-tuples/pairs)."}
   [library
    [lux #*
     [abstract
diff --git a/stdlib/source/library/lux/data/text.lux b/stdlib/source/library/lux/data/text.lux
index 70b0360b1..5a1b8a981 100644
--- a/stdlib/source/library/lux/data/text.lux
+++ b/stdlib/source/library/lux/data/text.lux
@@ -13,7 +13,7 @@
      ["." maybe]]
     [data
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      [number
       ["n" nat]
@@ -288,7 +288,7 @@
   (-> (List Text) Text)
   (let [(^open ".") ..monoid]
     (|>> list.reversed
-         (list\fold compose identity))))
+         (list\mix compose identity))))
 
 (def: .public (interposed separator texts)
   (-> Text (List Text) Text)
diff --git a/stdlib/source/library/lux/data/text/buffer.lux b/stdlib/source/library/lux/data/text/buffer.lux
index 08f640648..e23a11f63 100644
--- a/stdlib/source/library/lux/data/text/buffer.lux
+++ b/stdlib/source/library/lux/data/text/buffer.lux
@@ -11,7 +11,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." array]
-      ["." row (#+ Row) ("#\." fold)]]]
+      ["." row (#+ Row) ("#\." mix)]]]
     [math
      [number
       ["n" nat]]]
@@ -108,9 +108,9 @@
                 @.lua <jvm>}
                ... default
                (|>> :representation
-                    (row\fold (function (_ chunk total)
-                                (n.+ (//.size chunk) total))
-                              0)))))
+                    (row\mix (function (_ chunk total)
+                               (n.+ (//.size chunk) total))
+                             0)))))
 
       (def: .public (text buffer)
         (-> Buffer Text)
@@ -128,8 +128,8 @@
                 @.lua (let [[capacity transform] (:representation buffer)]
                         (table/concat [(transform (array.empty 0)) ""]))}
                ... default
-               (row\fold (function (_ chunk total)
-                           (format total chunk))
-                         ""
-                         (:representation buffer)))))
+               (row\mix (function (_ chunk total)
+                          (format total chunk))
+                        ""
+                        (:representation buffer)))))
       ))
diff --git a/stdlib/source/library/lux/data/text/encoding.lux b/stdlib/source/library/lux/data/text/encoding.lux
index fbe70b92d..b1947bf67 100644
--- a/stdlib/source/library/lux/data/text/encoding.lux
+++ b/stdlib/source/library/lux/data/text/encoding.lux
@@ -14,7 +14,6 @@
 
   (template [<name> <encoding>]
     [(`` (def: .public <name>
-           {#.doc (example (~~ (template.text ["'" <encoding> "' text encoding. "])))}
            Encoding
            (:abstraction <encoding>)))]
 
diff --git a/stdlib/source/library/lux/data/text/encoding/utf8.lux b/stdlib/source/library/lux/data/text/encoding/utf8.lux
index 0adb95c82..e7d9b611c 100644
--- a/stdlib/source/library/lux/data/text/encoding/utf8.lux
+++ b/stdlib/source/library/lux/data/text/encoding/utf8.lux
@@ -24,8 +24,8 @@
                ... On Node
                (ffi.import: Buffer
                  ["#::."
-                  (#static from #as from|encode [ffi.String ffi.String] Buffer)
-                  (#static from #as from|decode [Uint8Array] Buffer)
+                  (#static from #as from|encoded [ffi.String ffi.String] Buffer)
+                  (#static from #as from|decoded [Uint8Array] Buffer)
                   (toString [ffi.String] ffi.String)])
 
                ... On the browser
@@ -62,7 +62,7 @@
                (ffi.import: (utf8->string [Binary] Text)))}
        (as_is)))
 
-(def: (encode value)
+(def: (encoded value)
   (-> Text Binary)
   (for {@.old
         (java/lang/String::getBytes (//.name //.utf_8)
@@ -80,7 +80,7 @@
               (:as Binary ("js object do" "getBytes" value ["utf8"]))
               
               ffi.on_node_js?
-              (|> (Buffer::from|encode [value "utf8"])
+              (|> (Buffer::from|encoded [value "utf8"])
                   ... This coercion is valid as per NodeJS's documentation:
                   ... https://nodejs.org/api/buffer.html#buffer_buffers_and_typedarrays
                   (:as Uint8Array))
@@ -111,7 +111,7 @@
         @.scheme
         (..string->utf8 value)}))
 
-(def: (decode value)
+(def: (decoded value)
   (-> Binary (Try Text))
   (with_expansions [<jvm> (#try.Success (java/lang/String::new value (//.name //.utf_8)))]
     (for {@.old <jvm>
@@ -124,7 +124,7 @@
                     #try.Success)
 
                 ffi.on_node_js?
-                (|> (Buffer::from|decode [value])
+                (|> (Buffer::from|decoded [value])
                     (Buffer::toString ["utf8"])
                     #try.Success)
                 
@@ -158,8 +158,7 @@
               #try.Success)})))
 
 (implementation: .public codec
-  {#.doc (example "A codec for binary encoding of text as UTF-8.")}
   (Codec Binary Text)
   
-  (def: encode ..encode)
-  (def: decode ..decode))
+  (def: encoded ..encoded)
+  (def: decoded ..decoded))
diff --git a/stdlib/source/library/lux/data/text/escape.lux b/stdlib/source/library/lux/data/text/escape.lux
index dc847995a..4d99b6c8c 100644
--- a/stdlib/source/library/lux/data/text/escape.lux
+++ b/stdlib/source/library/lux/data/text/escape.lux
@@ -94,7 +94,7 @@
 
 (def: (unicode_escaped char pre_offset pre_limit previous current)
   (-> Char Nat Nat Text Text [Text Text Nat])
-  (let [code (\ n.hex encode char)
+  (let [code (\ n.hex encoded char)
         replacement (format ..sigil "u"
                             (case ("lux text size" code)
                               1 (format "000" code)
@@ -178,7 +178,7 @@
   (-> Nat Text Text Nat (Try [Text Text Nat]))
   (case (|> current
             ("lux text clip" (n.+ ..ascii_escape_offset offset) ..code_size)
-            (\ n.hex decode))
+            (\ n.hex decoded))
     (#try.Success char)
     (let [limit' (|> limit (n.- offset) (n.- ..unicode_escape_offset))]
       (#try.Success [(format previous
diff --git a/stdlib/source/library/lux/data/text/format.lux b/stdlib/source/library/lux/data/text/format.lux
index de6482910..cd953ef05 100644
--- a/stdlib/source/library/lux/data/text/format.lux
+++ b/stdlib/source/library/lux/data/text/format.lux
@@ -56,35 +56,35 @@
      (Format <type>)
      <formatter>)]
 
-  [bit      Bit               (\ bit.codec encode)]
-  [nat      Nat               (\ nat.decimal encode)]
-  [int      Int               (\ int.decimal encode)]
-  [rev      Rev               (\ rev.decimal encode)]
-  [frac     Frac              (\ frac.decimal encode)]
+  [bit      Bit               (\ bit.codec encoded)]
+  [nat      Nat               (\ nat.decimal encoded)]
+  [int      Int               (\ int.decimal encoded)]
+  [rev      Rev               (\ rev.decimal encoded)]
+  [frac     Frac              (\ frac.decimal encoded)]
   [text     Text              text.format]
   
-  [ratio    ratio.Ratio       (\ ratio.codec encode)]
-  [name     Name              (\ name.codec encode)]
+  [ratio    ratio.Ratio       (\ ratio.codec encoded)]
+  [name     Name              (\ name.codec encoded)]
   [location Location          location.format]
   [code     Code              code.format]
   [type     Type              type.format]
   
-  [instant  instant.Instant   (\ instant.codec encode)]
-  [duration duration.Duration (\ duration.codec encode)]
-  [date     date.Date         (\ date.codec encode)]
-  [time     time.Time         (\ time.codec encode)]
-  [day      day.Day           (\ day.codec encode)]
-  [month    month.Month       (\ month.codec encode)]
+  [instant  instant.Instant   (\ instant.codec encoded)]
+  [duration duration.Duration (\ duration.codec encoded)]
+  [date     date.Date         (\ date.codec encoded)]
+  [time     time.Time         (\ time.codec encoded)]
+  [day      day.Day           (\ day.codec encoded)]
+  [month    month.Month       (\ month.codec encoded)]
   
-  [xml      xml.XML           (\ xml.codec encode)]
-  [json     json.JSON         (\ json.codec encode)]
+  [xml      xml.XML           (\ xml.codec encoded)]
+  [json     json.JSON         (\ json.codec encoded)]
   )
 
 (template [<type> <format>,<codec>]
   [(`` (template [<format> <codec>]
          [(def: .public <format>
             (Format <type>)
-            (\ <codec> encode))]
+            (\ <codec> encoded))]
 
          (~~ (template.spliced <format>,<codec>))))]
 
@@ -113,7 +113,7 @@
 (def: .public (mod modular)
   (All [m] (Format (modular.Mod m)))
   (let [codec (modular.codec (modular.modulus modular))]
-    (\ codec encode modular)))
+    (\ codec encoded modular)))
 
 (def: .public (list formatter)
   (All [a] (-> (Format a) (Format (List a))))
diff --git a/stdlib/source/library/lux/data/text/regex.lux b/stdlib/source/library/lux/data/text/regex.lux
index 8c626ed6e..fa822c33b 100644
--- a/stdlib/source/library/lux/data/text/regex.lux
+++ b/stdlib/source/library/lux/data/text/regex.lux
@@ -14,7 +14,7 @@
     [data
      ["." product]
      [collection
-      ["." list ("#\." fold monad)]]]
+      ["." list ("#\." mix monad)]]]
     [macro (#+ with_identifiers)
      [syntax (#+ syntax:)]
      ["." code]]
@@ -119,10 +119,10 @@
     [_ (in [])
      init re_user_class^'
      rest (<>.some (<>.after (<text>.this "&&") (<text>.enclosed ["[" "]"] re_user_class^')))]
-    (in (list\fold (function (_ refinement base)
-                     (` ((~! refine^) (~ refinement) (~ base))))
-                   init
-                   rest))))
+    (in (list\mix (function (_ refinement base)
+                    (` ((~! refine^) (~ refinement) (~ base))))
+                  init
+                  rest))))
 
 (def: blank^
   (Parser Text)
@@ -195,7 +195,7 @@
   (<>.either (do <>.monad
                [_ (<text>.this "\")
                 id number^]
-               (in (` ((~! ..copy) (~ (code.identifier ["" (n\encode id)]))))))
+               (in (` ((~! ..copy) (~ (code.identifier ["" (n\encoded id)]))))))
              (do <>.monad
                [_ (<text>.this "\k<")
                 captured_name name_part^
@@ -282,38 +282,38 @@
                            (re_scoped^ current_module)))
      .let [g!total (code.identifier ["" "0total"])
            g!temp (code.identifier ["" "0temp"])
-           [_ names steps] (list\fold (: (-> (Either Code [Re_Group Code])
-                                             [Nat (List Code) (List (List Code))]
-                                             [Nat (List Code) (List (List Code))])
-                                         (function (_ part [idx names steps])
-                                           (case part
-                                             (^or (#.Left complex) (#.Right [#Non_Capturing complex]))
-                                             [idx
-                                              names
-                                              (list& (list g!temp complex
-                                                           (` .let) (` [(~ g!total) (\ (~! //.monoid) (~' compose) (~ g!total) (~ g!temp))]))
-                                                     steps)]
-                                             
-                                             (#.Right [(#Capturing [?name num_captures]) scoped])
-                                             (let [[idx! name!] (case ?name
-                                                                  (#.Some _name)
-                                                                  [idx (code.identifier ["" _name])]
-
-                                                                  #.None
-                                                                  [(++ idx) (code.identifier ["" (n\encode idx)])])
-                                                   access (if (n.> 0 num_captures)
-                                                            (` ((~! product.left) (~ name!)))
-                                                            name!)]
-                                               [idx!
-                                                (list& name! names)
-                                                (list& (list name! scoped
-                                                             (` .let) (` [(~ g!total) (\ (~! //.monoid) (~' compose) (~ g!total) (~ access))]))
-                                                       steps)])
-                                             )))
-                                      [0
-                                       (: (List Code) (list))
-                                       (: (List (List Code)) (list))]
-                                      parts)]]
+           [_ names steps] (list\mix (: (-> (Either Code [Re_Group Code])
+                                            [Nat (List Code) (List (List Code))]
+                                            [Nat (List Code) (List (List Code))])
+                                        (function (_ part [idx names steps])
+                                          (case part
+                                            (^or (#.Left complex) (#.Right [#Non_Capturing complex]))
+                                            [idx
+                                             names
+                                             (list& (list g!temp complex
+                                                          (` .let) (` [(~ g!total) (\ (~! //.monoid) (~' compose) (~ g!total) (~ g!temp))]))
+                                                    steps)]
+                                            
+                                            (#.Right [(#Capturing [?name num_captures]) scoped])
+                                            (let [[idx! name!] (case ?name
+                                                                 (#.Some _name)
+                                                                 [idx (code.identifier ["" _name])]
+
+                                                                 #.None
+                                                                 [(++ idx) (code.identifier ["" (n\encoded idx)])])
+                                                  access (if (n.> 0 num_captures)
+                                                           (` ((~! product.left) (~ name!)))
+                                                           name!)]
+                                              [idx!
+                                               (list& name! names)
+                                               (list& (list name! scoped
+                                                            (` .let) (` [(~ g!total) (\ (~! //.monoid) (~' compose) (~ g!total) (~ access))]))
+                                                      steps)])
+                                            )))
+                                     [0
+                                      (: (List Code) (list))
+                                      (: (List (List Code)) (list))]
+                                     parts)]]
     (in [(if capturing?
            (list.size names)
            0)
@@ -374,7 +374,7 @@
      tail (<>.some (<>.after (<text>.this "|") sub^))]
     (if (list.empty? tail)
       (in head)
-      (in [(list\fold n.max (product.left head) (list\map product.left tail))
+      (in [(list\mix n.max (product.left head) (list\map product.left tail))
            (` ($_ ((~ (if capturing?
                         (` (~! |||^))
                         (` (~! |||_^)))))
diff --git a/stdlib/source/library/lux/data/text/unicode/set.lux b/stdlib/source/library/lux/data/text/unicode/set.lux
index be47d038a..ef489af08 100644
--- a/stdlib/source/library/lux/data/text/unicode/set.lux
+++ b/stdlib/source/library/lux/data/text/unicode/set.lux
@@ -5,7 +5,7 @@
      [equivalence (#+ Equivalence)]]
     [data
      [collection
-      ["." list ("#\." fold functor)]
+      ["." list ("#\." mix functor)]
       ["." set ("#\." equivalence)]
       ["." tree #_
        ["#" finger (#+ Tree)]]]]
@@ -45,11 +45,11 @@
 
   (def: .public (set [head tail])
     (-> [Block (List Block)] Set)
-    (list\fold (: (-> Block Set Set)
-                  (function (_ block set)
-                    (..composite (..singleton block) set)))
-               (..singleton head)
-               tail))
+    (list\mix (: (-> Block Set Set)
+                 (function (_ block set)
+                   (..composite (..singleton block) set)))
+              (..singleton head)
+              tail))
 
   (def: character/0
     Set
diff --git a/stdlib/source/library/lux/documentation.lux b/stdlib/source/library/lux/documentation.lux
index aca2b4e89..4768a1975 100644
--- a/stdlib/source/library/lux/documentation.lux
+++ b/stdlib/source/library/lux/documentation.lux
@@ -15,7 +15,7 @@
      ["." text (#+ \n) ("#\." order)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." monad fold monoid)]
+      ["." list ("#\." monad mix monoid)]
       ["." set (#+ Set)]]
      [format
       ["md" markdown (#+ Markdown Block)]]]
@@ -60,14 +60,14 @@
       [[[_ _ column] (<tag> members)]
        (|> members
            (list\map reference_column)
-           (list\fold n.min column))])
+           (list\mix n.min column))])
     ([#.Form]
      [#.Tuple])
 
     [[_ _ column] (#.Record pairs)]
     (|> (list\compose (list\map (|>> product.left reference_column) pairs)
                       (list\map (|>> product.right reference_column) pairs))
-        (list\fold n.min column))
+        (list\mix n.min column))
     ))
 
 (def: (padding reference_column [_ old_line old_column] [_ new_line new_column])
@@ -89,7 +89,7 @@
                   (function (_ [left right] tail)
                     (list& left right tail)))]
     (|>> list.reversed
-         (list\fold melded #.End))))
+         (list\mix melded #.End))))
 
 (def: (code_documentation old_location reference_column example)
   (-> Location Nat Code [Location Text])
@@ -111,11 +111,11 @@
 
     (^template [|<| |>| <tag> <prep>]
       [[group_location (<tag> members)]
-       (let [[group_location' members_documentation] (list\fold (function (_ part [last_location text_accum])
-                                                                  (let [[member_location member_documentation] (code_documentation last_location reference_column part)]
-                                                                    [member_location (format text_accum member_documentation)]))
-                                                                [(revised@ #.column ++ group_location) ""]
-                                                                (<prep> members))]
+       (let [[group_location' members_documentation] (list\mix (function (_ part [last_location text_accum])
+                                                                 (let [[member_location member_documentation] (code_documentation last_location reference_column part)]
+                                                                   [member_location (format text_accum member_documentation)]))
+                                                               [(revised@ #.column ++ group_location) ""]
+                                                               (<prep> members))]
          [(revised@ #.column ++ group_location')
           (format (padding reference_column old_location group_location)
                   |<| members_documentation |>|)])])
@@ -279,7 +279,7 @@
                       (text\< (value@ #definition right)
                               (value@ #definition left))))
        (list\map (value@ #documentation))
-       (list\fold md.then md.empty)))
+       (list\mix md.then md.empty)))
 
 (def: expected_separator
   Text
@@ -287,11 +287,11 @@
 
 (def: expected_format
   (-> (List Text) Text)
-  (list\fold (function (_ short aggregate)
-               (case aggregate
-                 "" short
-                 _ (format aggregate ..expected_separator short)))
-             ""))
+  (list\mix (function (_ short aggregate)
+              (case aggregate
+                "" short
+                _ (format aggregate ..expected_separator short)))
+            ""))
 
 (def: expected
   (-> Text (Set Text))
@@ -354,9 +354,9 @@
         ... Missing documentation
         (case (|> module
                   (value@ #definitions)
-                  (list\fold (function (_ definition missing)
-                               (set.lacks (value@ #definition definition) missing))
-                             expected)
+                  (list\mix (function (_ definition missing)
+                              (set.lacks (value@ #definition definition) missing))
+                            expected)
                   set.list)
           #.End
           md.empty
@@ -385,5 +385,5 @@
                       (text\< (value@ #module right) (value@ #module left))))
        (list\map ..module_documentation)
        (list.interposed md.horizontal_rule)
-       (list\fold md.then (: (Markdown Block) md.empty))
+       (list\mix md.then (: (Markdown Block) md.empty))
        md.markdown))
diff --git a/stdlib/source/library/lux/ffi.js.lux b/stdlib/source/library/lux/ffi.js.lux
index 65665bcd3..6d8ed9658 100644
--- a/stdlib/source/library/lux/ffi.js.lux
+++ b/stdlib/source/library/lux/ffi.js.lux
@@ -14,7 +14,7 @@
      ["." text
       ["%" format]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor)]]]
     [type
      abstract]
     [macro (#+ with_identifiers)
diff --git a/stdlib/source/library/lux/ffi.jvm.lux b/stdlib/source/library/lux/ffi.jvm.lux
index a025b8108..16c4887ab 100644
--- a/stdlib/source/library/lux/ffi.jvm.lux
+++ b/stdlib/source/library/lux/ffi.jvm.lux
@@ -19,7 +19,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." array]
-      ["." list ("#\." monad fold monoid)]
+      ["." list ("#\." monad mix monoid)]
       ["." dictionary (#+ Dictionary)]]]
     [macro (#+ with_identifiers)
      [syntax (#+ syntax:)]
@@ -71,7 +71,6 @@
 
 (template [<name> <class>]
   [(`` (def: .public <name>
-         {#.doc (example (~~ (template.text ["The type of an (unboxed) " <name> " value."])))}
          .Type
          (#.Primitive (reflection.reflection <class>) #.End)))]
 
@@ -126,9 +125,6 @@
 
 (template [<name> <op> <from> <to>]
   [(template: .public (<name> value)
-     {#.doc (example "Type converter."
-                     (: <to>
-                        (<name> (: <from> foo))))}
      [(|> value
           (: <from>)
           "jvm object cast"
@@ -169,9 +165,6 @@
 
 (template [<name> <from> <to> <0> <1>]
   [(template: .public (<name> value)
-     {#.doc (example "Type converter."
-                     (: <to>
-                        (<name> (: <from> foo))))}
      [(|> value <0> <1>)])]
 
   [long_to_char ..Long ..Character ..long_to_int ..int_to_char]
@@ -1098,7 +1091,7 @@
   (case method_def
     (#ConstructorMethod strict_fp? type_vars self_name arguments constructor_args body exs)
     (let [replacer (|> (list\map (field->parser fully_qualified_class_name self_name) fields)
-                       (list\fold <>.either method_parser)
+                       (list\mix <>.either method_parser)
                        parser->replacer)]
       (` ("init"
           (~ (privacy_modifier$ pm))
@@ -1114,7 +1107,7 @@
     
     (#VirtualMethod final? strict_fp? type_vars self_name arguments return_type body exs)
     (let [replacer (|> (list\map (field->parser fully_qualified_class_name self_name) fields)
-                       (list\fold <>.either method_parser)
+                       (list\mix <>.either method_parser)
                        parser->replacer)]
       (` ("virtual"
           (~ (code.text name))
@@ -1131,7 +1124,7 @@
     
     (#OverridenMethod strict_fp? declaration type_vars self_name arguments return_type body exs)
     (let [replacer (|> (list\map (field->parser fully_qualified_class_name self_name) fields)
-                       (list\fold <>.either method_parser)
+                       (list\mix <>.either method_parser)
                        parser->replacer)
           super_replacer (parser->replacer (<code>.form (do <>.monad
                                                           [_ (<code>.this! (' ::super!))
@@ -1215,7 +1208,7 @@
            method_parser (: (Parser Code)
                             (|> methods
                                 (list\map (method->parser fully_qualified_class_name))
-                                (list\fold <>.either (<>.failure ""))))]]
+                                (list\mix <>.either (<>.failure ""))))]]
     (in (list (` ("jvm class"
                   (~ (declaration$ (type.declaration full_class_name class_vars)))
                   (~ (class$ super))
diff --git a/stdlib/source/library/lux/ffi.lua.lux b/stdlib/source/library/lux/ffi.lua.lux
index ddfeede9d..4d3f5aa26 100644
--- a/stdlib/source/library/lux/ffi.lua.lux
+++ b/stdlib/source/library/lux/ffi.lua.lux
@@ -15,7 +15,7 @@
      ["." text
       ["%" format]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [type
      abstract]
     [macro (#+ with_identifiers)
@@ -231,11 +231,11 @@
               real_class (text.replaced "/" "." class)
               imported (case (text.all_split_by "/" class)
                          (#.Item head tail)
-                         (list\fold (function (_ sub super)
-                                      (` ("lua object get" (~ (code.text sub))
-                                          (:as (..Object .Any) (~ super)))))
-                                    (` ("lua import" (~ (code.text head))))
-                                    tail)
+                         (list\mix (function (_ sub super)
+                                     (` ("lua object get" (~ (code.text sub))
+                                         (:as (..Object .Any) (~ super)))))
+                                   (` ("lua import" (~ (code.text head))))
+                                   tail)
                          
                          #.End
                          (` ("lua import" (~ (code.text class)))))]
diff --git a/stdlib/source/library/lux/ffi.old.lux b/stdlib/source/library/lux/ffi.old.lux
index 9acf8e055..9ec503f1b 100644
--- a/stdlib/source/library/lux/ffi.old.lux
+++ b/stdlib/source/library/lux/ffi.old.lux
@@ -19,7 +19,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." array (#+ Array)]
-      ["." list ("#\." monad fold monoid)]]]
+      ["." list ("#\." monad mix monoid)]]]
     [macro (#+ with_identifiers)
      [syntax (#+ syntax:)]
      ["." code]]
@@ -1067,7 +1067,7 @@
     (with_parens
       (spaced (list "init"
                     (privacy_modifier$ pm)
-                    (bit\encode strict_fp?)
+                    (bit\encoded strict_fp?)
                     (with_brackets (spaced (list\map annotation$ anns)))
                     (with_brackets (spaced (list\map type_param$ type_vars)))
                     (with_brackets (spaced (list\map generic_type$ exs)))
@@ -1081,8 +1081,8 @@
       (spaced (list "virtual"
                     name
                     (privacy_modifier$ pm)
-                    (bit\encode final?)
-                    (bit\encode strict_fp?)
+                    (bit\encoded final?)
+                    (bit\encoded strict_fp?)
                     (with_brackets (spaced (list\map annotation$ anns)))
                     (with_brackets (spaced (list\map type_param$ type_vars)))
                     (with_brackets (spaced (list\map generic_type$ exs)))
@@ -1106,7 +1106,7 @@
         (spaced (list "override"
                       (class_decl$ class_decl)
                       name
-                      (bit\encode strict_fp?)
+                      (bit\encoded strict_fp?)
                       (with_brackets (spaced (list\map annotation$ anns)))
                       (with_brackets (spaced (list\map type_param$ type_vars)))
                       (with_brackets (spaced (list\map generic_type$ exs)))
@@ -1124,7 +1124,7 @@
       (spaced (list "static"
                     name
                     (privacy_modifier$ pm)
-                    (bit\encode strict_fp?)
+                    (bit\encoded strict_fp?)
                     (with_brackets (spaced (list\map annotation$ anns)))
                     (with_brackets (spaced (list\map type_param$ type_vars)))
                     (with_brackets (spaced (list\map generic_type$ exs)))
@@ -1211,9 +1211,9 @@
      .let [fully_qualified_class_name (format (safe current_module) "." full_class_name)
            field_parsers (list\map (field_parser fully_qualified_class_name) fields)
            method_parsers (list\map (method_parser (product.right class_decl) fully_qualified_class_name) methods)
-           replacer (parser_replacer (list\fold <>.either
-                                                (<>.failure "")
-                                                (list\compose field_parsers method_parsers)))
+           replacer (parser_replacer (list\mix <>.either
+                                               (<>.failure "")
+                                               (list\compose field_parsers method_parsers)))
            def_code (format "jvm class:"
                             (spaced (list (class_decl$ class_decl)
                                           (super_class_decl$ super)
diff --git a/stdlib/source/library/lux/ffi.php.lux b/stdlib/source/library/lux/ffi.php.lux
index 112c0c0be..453f2c59e 100644
--- a/stdlib/source/library/lux/ffi.php.lux
+++ b/stdlib/source/library/lux/ffi.php.lux
@@ -15,7 +15,7 @@
      ["." text
       ["%" format]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor)]]]
     [type
      abstract]
     [macro (#+ with_identifiers)
diff --git a/stdlib/source/library/lux/ffi.py.lux b/stdlib/source/library/lux/ffi.py.lux
index c4d8e1298..e3eea52e2 100644
--- a/stdlib/source/library/lux/ffi.py.lux
+++ b/stdlib/source/library/lux/ffi.py.lux
@@ -15,7 +15,7 @@
      ["." text
       ["%" format]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [type
      abstract]
     [macro (#+ with_identifiers)
@@ -251,11 +251,11 @@
               real_class (text.replaced "/" "." class)
               imported (case (text.all_split_by "/" class)
                          (#.Item head tail)
-                         (list\fold (function (_ sub super)
-                                      (` ("python object get" (~ (code.text sub))
-                                          (:as (..Object .Any) (~ super)))))
-                                    (` ("python import" (~ (code.text head))))
-                                    tail)
+                         (list\mix (function (_ sub super)
+                                     (` ("python object get" (~ (code.text sub))
+                                         (:as (..Object .Any) (~ super)))))
+                                   (` ("python import" (~ (code.text head))))
+                                   tail)
                          
                          #.End
                          (` ("python import" (~ (code.text class)))))]
diff --git a/stdlib/source/library/lux/ffi.rb.lux b/stdlib/source/library/lux/ffi.rb.lux
index 7175fe4c9..c01b88565 100644
--- a/stdlib/source/library/lux/ffi.rb.lux
+++ b/stdlib/source/library/lux/ffi.rb.lux
@@ -15,7 +15,7 @@
      ["." text
       ["%" format]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor)]]]
     [type
      abstract]
     [macro (#+ with_identifiers)
diff --git a/stdlib/source/library/lux/ffi.scm.lux b/stdlib/source/library/lux/ffi.scm.lux
index c3b77f830..ab2e6cdff 100644
--- a/stdlib/source/library/lux/ffi.scm.lux
+++ b/stdlib/source/library/lux/ffi.scm.lux
@@ -15,7 +15,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor)]]]
     [type
      abstract]
     [macro (#+ with_identifiers)
diff --git a/stdlib/source/library/lux/macro.lux b/stdlib/source/library/lux/macro.lux
index 8e11c4a58..cdd76278b 100644
--- a/stdlib/source/library/lux/macro.lux
+++ b/stdlib/source/library/lux/macro.lux
@@ -106,7 +106,7 @@
   (do //.monad
     [id //.seed]
     (in (|> id
-            (\ nat.decimal encode)
+            (\ nat.decimal encoded)
             ($_ text\compose "__gensym__" prefix)
             [""] code.identifier))))
 
@@ -121,7 +121,7 @@
 
 (def: .public wrong_syntax_error
   (-> Name Text)
-  (|>> name\encode
+  (|>> name\encoded
        (text.prefix (text\compose "Wrong syntax for " text.\''))
        (text.suffix (text\compose text.\'' "."))))
 
@@ -171,7 +171,7 @@
          (do //.monad
            [location //.location
             output (<func> token)
-            .let [_ ("lux io log" ($_ text\compose (name\encode macro_name) " " (location.format location)))
+            .let [_ ("lux io log" ($_ text\compose (name\encoded macro_name) " " (location.format location)))
                   _ (list\map (|>> code.format "lux io log")
                               output)
                   _ ("lux io log" "")]]
diff --git a/stdlib/source/library/lux/macro/code.lux b/stdlib/source/library/lux/macro/code.lux
index 79eebb5df..5de323722 100644
--- a/stdlib/source/library/lux/macro/code.lux
+++ b/stdlib/source/library/lux/macro/code.lux
@@ -9,7 +9,7 @@
      ["." name]
      ["." text ("#\." monoid equivalence)]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["." nat]
@@ -96,7 +96,7 @@
   (case ast
     (^template [<tag> <struct>]
       [[_ (<tag> value)]
-       (\ <struct> encode value)])
+       (\ <struct> encoded value)])
     ([#.Bit        bit.codec]
      [#.Nat        nat.decimal]
      [#.Int        int.decimal]
@@ -108,19 +108,19 @@
     (text.format value)
 
     [_ (#.Tag name)]
-    (text\compose  "#" (\ name.codec encode name))
+    (text\compose  "#" (\ name.codec encoded name))
 
     (^template [<tag> <open> <close>]
       [[_ (<tag> members)]
        ($_ text\compose
            <open>
-           (list\fold (function (_ next prev)
-                        (let [next (format next)]
-                          (if (text\= "" prev)
-                            next
-                            ($_ text\compose prev " " next))))
-                      ""
-                      members)
+           (list\mix (function (_ next prev)
+                       (let [next (format next)]
+                         (if (text\= "" prev)
+                           next
+                           ($_ text\compose prev " " next))))
+                     ""
+                     members)
            <close>)])
     ([#.Form  "(" ")"]
      [#.Tuple "[" "]"])
@@ -128,18 +128,17 @@
     [_ (#.Record pairs)]
     ($_ text\compose
         "{"
-        (list\fold (function (_ [left right] prev)
-                     (let [next ($_ text\compose (format left) " " (format right))]
-                       (if (text\= "" prev)
-                         next
-                         ($_ text\compose prev " " next))))
-                   ""
-                   pairs)
+        (list\mix (function (_ [left right] prev)
+                    (let [next ($_ text\compose (format left) " " (format right))]
+                      (if (text\= "" prev)
+                        next
+                        ($_ text\compose prev " " next))))
+                  ""
+                  pairs)
         "}")
     ))
 
 (def: .public (replaced original substitute ast)
-  {#.doc "Replaces all code that looks like the 'original' with the 'substitute'."}
   (-> Code Code Code Code)
   (if (\ ..equivalence = original ast)
     substitute
diff --git a/stdlib/source/library/lux/macro/template.lux b/stdlib/source/library/lux/macro/template.lux
index aac7af03c..aea5bfb5c 100644
--- a/stdlib/source/library/lux/macro/template.lux
+++ b/stdlib/source/library/lux/macro/template.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Utilities commonly used while templating."}
   [library
    [lux (#- let local)
     ["." meta]
@@ -69,11 +68,11 @@
           full_tag
           (<>.either <code>.local_tag
                      full_tag))
-        (<>\map bit\encode <code>.bit)
-        (<>\map nat\encode <code>.nat)
-        (<>\map int\encode <code>.int)
-        (<>\map rev\encode <code>.rev)
-        (<>\map frac\encode <code>.frac)
+        (<>\map bit\encoded <code>.bit)
+        (<>\map nat\encoded <code>.nat)
+        (<>\map int\encoded <code>.int)
+        (<>\map rev\encoded <code>.rev)
+        (<>\map frac\encoded <code>.frac)
         )))
 
 (def: (part module_side?)
@@ -135,8 +134,8 @@
 
 (exception: .public (irregular_arguments {expected Nat} {actual Nat})
   (exception.report
-   ["Expected" (\ nat.decimal encode expected)]
-   ["Actual" (\ nat.decimal encode actual)]))
+   ["Expected" (\ nat.decimal encoded expected)]
+   ["Actual" (\ nat.decimal encoded actual)]))
 
 (def: (macro (^slots [#parameters #template]))
   (-> Local Macro)
diff --git a/stdlib/source/library/lux/math.lux b/stdlib/source/library/lux/math.lux
index e088df673..a0a31472d 100644
--- a/stdlib/source/library/lux/math.lux
+++ b/stdlib/source/library/lux/math.lux
@@ -1,4 +1,4 @@
-(.module: {#.doc "Common mathematical constants and functions."}
+(.module:
   [library
    [lux #*
     ["@" target]
@@ -7,23 +7,22 @@
       ["n" nat]
       ["i" int]]]]])
 
-(template [<name> <value> <doc>]
+(template [<name> <value>]
   [(def: .public <name>
-     {#.doc <doc>}
      <value>)]
 
-  [e   +2.7182818284590452354  "The base of the natural logarithm."]
+  [e   +2.7182818284590452354]
   ... ["Ï€ is wrong!" by Bob Palais](https://www.math.utah.edu/~palais/pi.html)
-  [pi  +3.14159265358979323846 "The ratio of a circle's circumference to its diameter."]
+  [pi  +3.14159265358979323846]
   ... [The Tau Manifesto](https://tauday.com/tau-manifesto)
-  [tau +6.28318530717958647692 "The ratio of a circle's circumference to its radius."]
+  [tau +6.28318530717958647692]
   )
 
 (for {@.old
       (as_is (template [<name> <method>]
-               [(def: .public (<name> input)
+               [(def: .public (<name> it)
                   (-> Frac Frac)
-                  (<method> input))]
+                  (<method> it))]
 
                [cos   "jvm invokestatic:java.lang.Math:cos:double"]
                [sin   "jvm invokestatic:java.lang.Math:sin:double"]
@@ -285,10 +284,10 @@
                (..pow ("lux f64 /" +3.0 +1.0))))
       })
 
-(def: .public (round input)
+(def: .public (round it)
   (-> Frac Frac)
-  (let [floored (floor input)
-        diff ("lux f64 -" floored input)]
+  (let [floored (floor it)
+        diff ("lux f64 -" floored it)]
     (cond ("lux f64 <" diff +0.5)
           ("lux f64 +" +1.0 floored)
           
@@ -319,19 +318,19 @@
               ... ("lux f64 =" +0.0 y)
               ("lux f64 /" +0.0 +0.0))))
 
-(def: .public (log' base input)
+(def: .public (log' base it)
   (-> Frac Frac Frac)
   ("lux f64 /"
    (..log base)
-   (..log input)))
+   (..log it)))
 
-(def: .public (factorial n)
+(def: .public (factorial it)
   (-> Nat Nat)
   (loop [acc 1
-         n n]
-    (if (n.<= 1 n)
+         it it]
+    (if (n.<= 1 it)
       acc
-      (recur (n.* n acc) (-- n)))))
+      (recur (n.* it acc) (-- it)))))
 
 (def: .public (hypotenuse catA catB)
   (-> Frac Frac Frac)
@@ -342,23 +341,23 @@
 ... Hyperbolic functions
 ... https://en.wikipedia.org/wiki/Hyperbolic_function#Definitions
 (template [<name> <comp> <inverse>]
-  [(def: .public (<name> x)
+  [(def: .public (<name> it)
      (-> Frac Frac)
-     (|> (..exp x) (<comp> (..exp ("lux f64 *" -1.0 x))) ("lux f64 /" +2.0)))
+     (|> (..exp it) (<comp> (..exp ("lux f64 *" -1.0 it))) ("lux f64 /" +2.0)))
 
-   (def: .public (<inverse> x)
+   (def: .public (<inverse> it)
      (-> Frac Frac)
-     (|> +2.0 ("lux f64 /" (|> (..exp x) (<comp> (..exp ("lux f64 *" -1.0 x)))))))]
+     (|> +2.0 ("lux f64 /" (|> (..exp it) (<comp> (..exp ("lux f64 *" -1.0 it)))))))]
 
   [sinh "lux f64 -" csch]
   [cosh "lux f64 +" sech]
   )
 
 (template [<name> <top> <bottom>]
-  [(def: .public (<name> x)
+  [(def: .public (<name> it)
      (-> Frac Frac)
-     (let [e+ (exp x)
-           e- (exp ("lux f64 *" -1.0 x))
+     (let [e+ (exp it)
+           e- (exp ("lux f64 *" -1.0 it))
            sinh' (|> e+ ("lux f64 -" e-))
            cosh' (|> e+ ("lux f64 +" e-))]
        (|> <top> ("lux f64 /" <bottom>))))]
@@ -369,30 +368,30 @@
 
 ... https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions#Definitions_in_terms_of_logarithms
 (template [<name> <comp>]
-  [(def: .public (<name> x)
+  [(def: .public (<name> it)
      (-> Frac Frac)
-     (|> x (pow +2.0) (<comp> +1.0) (pow +0.5) ("lux f64 +" x) log))]
+     (|> it (pow +2.0) (<comp> +1.0) (pow +0.5) ("lux f64 +" it) log))]
 
   [asinh "lux f64 +"]
   [acosh "lux f64 -"]
   )
 
 (template [<name> <base> <diff>]
-  [(def: .public (<name> x)
+  [(def: .public (<name> it)
      (-> Frac Frac)
-     (let [x+ (|> <base> ("lux f64 +" <diff>))
-           x- (|> <base> ("lux f64 -" <diff>))]
-       (|> x+ ("lux f64 /" x-) log ("lux f64 /" +2.0))))]
+     (let [it+ (|> <base> ("lux f64 +" <diff>))
+           it- (|> <base> ("lux f64 -" <diff>))]
+       (|> it+ ("lux f64 /" it-) log ("lux f64 /" +2.0))))]
 
-  [atanh +1.0 x]
-  [acoth x +1.0]
+  [atanh +1.0 it]
+  [acoth it +1.0]
   )
 
 (template [<name> <op>]
-  [(def: .public (<name> x)
+  [(def: .public (<name> it)
      (-> Frac Frac)
-     (let [x^2 (|> x (pow +2.0))]
-       (|> +1.0 (<op> x^2) (pow +0.5) ("lux f64 +" +1.0) ("lux f64 /" x) log)))]
+     (let [it^2 (|> it (pow +2.0))]
+       (|> +1.0 (<op> it^2) (pow +0.5) ("lux f64 +" +1.0) ("lux f64 /" it) log)))]
 
   [asech "lux f64 -"]
   [acsch "lux f64 +"]
diff --git a/stdlib/source/library/lux/math/infix.lux b/stdlib/source/library/lux/math/infix.lux
index f63e86a4d..d2a210e7b 100644
--- a/stdlib/source/library/lux/math/infix.lux
+++ b/stdlib/source/library/lux/math/infix.lux
@@ -9,7 +9,7 @@
     [data
      ["." product]
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." code]]
@@ -50,21 +50,21 @@
                                init_op <code>.any
                                init_param expression
                                steps (<>.some (<>.and <code>.any expression))]
-                              (in (product.right (list\fold (function (_ [op param] [subject [_subject _op _param]])
-                                                              [param [(#Binary _subject _op _param)
-                                                                      (` and)
-                                                                      (#Binary subject op param)]])
-                                                            [init_param [init_subject init_op init_param]]
-                                                            steps))))
+                              (in (product.right (list\mix (function (_ [op param] [subject [_subject _op _param]])
+                                                             [param [(#Binary _subject _op _param)
+                                                                     (` and)
+                                                                     (#Binary subject op param)]])
+                                                           [init_param [init_subject init_op init_param]]
+                                                           steps))))
                             (do <>.monad
                               [init_subject expression
                                init_op <code>.any
                                init_param expression
                                steps (<>.some (<>.and <code>.any expression))]
-                              (in (list\fold (function (_ [op param] [_subject _op _param])
-                                               [(#Binary _subject _op _param) op param])
-                                             [init_subject init_op init_param]
-                                             steps)))
+                              (in (list\mix (function (_ [op param] [_subject _op _param])
+                                              [(#Binary _subject _op _param) op param])
+                                            [init_subject init_op init_param]
+                                            steps)))
                             ))
           )))
 
diff --git a/stdlib/source/library/lux/math/modular.lux b/stdlib/source/library/lux/math/modular.lux
index 5588ed574..9a94151c4 100644
--- a/stdlib/source/library/lux/math/modular.lux
+++ b/stdlib/source/library/lux/math/modular.lux
@@ -28,7 +28,7 @@
    ["#" modulus (#+ Modulus)]])
 
 (abstract: .public (Mod m)
-  {#.doc "A number under a modulus."}
+  {}
 
   {#modulus (Modulus m)
    #value Int}
@@ -50,8 +50,8 @@
   (exception: .public [%] (incorrect_modulus {modulus (Modulus %)}
                                              {parsed Int})
     (exception.report
-     ["Expected" (i\encode (//.divisor modulus))]
-     ["Actual" (i\encode parsed)]))
+     ["Expected" (i\encoded (//.divisor modulus))]
+     ["Actual" (i\encoded parsed)]))
 
   (def: separator
     " mod ")
@@ -64,14 +64,14 @@
   (implementation: .public (codec expected)
     (All [%] (-> (Modulus %) (Codec Text (Mod %))))
 
-    (def: (encode modular)
+    (def: (encoded modular)
       (let [[_ value] (:representation modular)]
         ($_ text\compose
-            (i\encode value)
+            (i\encoded value)
             ..separator
-            (i\encode (//.divisor expected)))))
+            (i\encoded (//.divisor expected)))))
 
-    (def: decode
+    (def: decoded
       (<text>.result
        (do <>.monad
          [[value _ actual] ($_ <>.and intL (<text>.this ..separator) intL)
@@ -144,8 +144,8 @@
 (exception: .public [r% s%] (moduli_are_not_equal {reference (Modulus r%)}
                                                   {subject (Modulus s%)})
   (exception.report
-   ["Reference" (i\encode (//.divisor reference))]
-   ["Subject" (i\encode (//.divisor subject))]))
+   ["Reference" (i\encoded (//.divisor reference))]
+   ["Subject" (i\encoded (//.divisor subject))]))
 
 (def: .public (adapter reference subject)
   (All [r% s%]
diff --git a/stdlib/source/library/lux/math/modulus.lux b/stdlib/source/library/lux/math/modulus.lux
index 3c360bf60..f52210e24 100644
--- a/stdlib/source/library/lux/math/modulus.lux
+++ b/stdlib/source/library/lux/math/modulus.lux
@@ -21,8 +21,7 @@
 (exception: .public zero_cannot_be_a_modulus)
 
 (abstract: .public (Modulus %)
-  {#.doc (example "A number used as a modulus in modular arithmetic."
-                  "It cannot be 0.")}
+  {}
 
   Int
 
@@ -50,11 +49,6 @@
   )
 
 (syntax: .public (literal [divisor <code>.int])
-  {#.doc (example "Success!"
-                  (literal 123)
-
-                  "Failure!"
-                  (literal 0))}
   (meta.lifted
    (do try.monad
      [_ (..modulus divisor)]
diff --git a/stdlib/source/library/lux/math/number.lux b/stdlib/source/library/lux/math/number.lux
index 2f2259c18..03007c32e 100644
--- a/stdlib/source/library/lux/math/number.lux
+++ b/stdlib/source/library/lux/math/number.lux
@@ -13,22 +13,6 @@
    ["#." rev]
    ["#." frac]])
 
-(macro: (documentation tokens state)
-  (case tokens
-    (^ (list [location (#.Text encoding)] example_1 example_2))
-    (let [encoding ($_ "lux text concat"
-                       "Given syntax for a "
-                       encoding
-                       " number, generates a Nat, an Int, a Rev or a Frac.")
-          separators "Allows for the presence of commas among the digits."
-          description [location (#.Text ($_ "lux text concat" encoding " " separators))]]
-      (#try.Success [state (list (` (.example (~ description)
-                                              (~ example_1)
-                                              (~ example_2))))]))
-
-    _
-    (#try.Failure "Wrong syntax for 'documentation'.")))
-
 (def: separator
   ",")
 
@@ -45,28 +29,27 @@
   (-> Text Text)
   (text.replaced ..separator ""))
 
-(template [<macro> <nat> <int> <rev> <frac> <error> <doc>]
+(template [<macro> <nat> <int> <rev> <frac> <error>]
   [(macro: .public (<macro> tokens state)
-     {#.doc <doc>}
      (case tokens
        (#.Item [meta (#.Text repr')] #.End)
        (if (..separator_prefixed? repr')
          (#try.Failure <error>)
          (let [repr (..without_separators repr')]
-           (case (\ <nat> decode repr)
+           (case (\ <nat> decoded repr)
              (#try.Success value)
              (#try.Success [state (list [meta (#.Nat value)])])
 
              (^multi (#try.Failure _)
-                     {(\ <int> decode repr) (#try.Success value)})
+                     {(\ <int> decoded repr) (#try.Success value)})
              (#try.Success [state (list [meta (#.Int value)])])
 
              (^multi (#try.Failure _)
-                     {(\ <rev> decode repr) (#try.Success value)})
+                     {(\ <rev> decoded repr) (#try.Success value)})
              (#try.Success [state (list [meta (#.Rev value)])])
 
              (^multi (#try.Failure _)
-                     {(\ <frac> decode repr) (#try.Success value)})
+                     {(\ <frac> decoded repr) (#try.Success value)})
              (#try.Success [state (list [meta (#.Frac value)])])
 
              _
@@ -75,13 +58,7 @@
        _
        (#try.Failure <error>)))]
 
-  [bin /nat.binary /int.binary /rev.binary /frac.binary
-   "Invalid binary syntax."
-   (..documentation "binary" (bin "11001001") (bin "11,00,10,01"))]
-  [oct /nat.octal  /int.octal  /rev.octal  /frac.octal
-   "Invalid octal syntax."
-   (..documentation "octal" (oct "615243") (oct "615,243"))]
-  [hex /nat.hex    /int.hex    /rev.hex    /frac.hex
-   "Invalid hexadecimal syntax."
-   (..documentation "hexadecimal" (hex "deadBEEF") (hex "dead,BEEF"))]
+  [bin /nat.binary /int.binary /rev.binary /frac.binary "Invalid binary syntax."]
+  [oct /nat.octal  /int.octal  /rev.octal  /frac.octal "Invalid octal syntax."]
+  [hex /nat.hex    /int.hex    /rev.hex    /frac.hex "Invalid hexadecimal syntax."]
   )
diff --git a/stdlib/source/library/lux/math/number/complex.lux b/stdlib/source/library/lux/math/number/complex.lux
index d26544c0b..324b84d43 100644
--- a/stdlib/source/library/lux/math/number/complex.lux
+++ b/stdlib/source/library/lux/math/number/complex.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Complex arithmetic."}
   [library
    [lux #*
     ["." math]
@@ -24,16 +23,11 @@
       ["." int]]]]])
 
 (type: .public Complex
-  {#.doc (example "A complex number.")}
   {#real Frac
    #imaginary Frac})
 
 (syntax: .public (complex [real <code>.any
                            ?imaginary (<>.maybe <code>.any)])
-  {#.doc (example "Complex literals."
-                  (complex real imaginary)
-                  "The imaginary part can be omitted if it's +0.0."
-                  (complex real))}
   (in (list (` {#..real (~ real)
                 #..imaginary (~ (maybe.else (' +0.0) ?imaginary))}))))
 
@@ -50,6 +44,7 @@
   (..complex +0.0 +0.0))
 
 (def: .public (not_a_number? complex)
+  (-> Complex Bit)
   (or (f.not_a_number? (value@ #real complex))
       (f.not_a_number? (value@ #imaginary complex))))
 
diff --git a/stdlib/source/library/lux/math/number/frac.lux b/stdlib/source/library/lux/math/number/frac.lux
index 1d92184b8..4e5eee846 100644
--- a/stdlib/source/library/lux/math/number/frac.lux
+++ b/stdlib/source/library/lux/math/number/frac.lux
@@ -23,28 +23,23 @@
    ["/#" //]])
 
 (def: .public (= reference sample)
-  {#.doc "Frac(tion) equivalence."}
   (-> Frac Frac Bit)
   ("lux f64 =" reference sample))
 
 (def: .public (< reference sample)
-  {#.doc "Frac(tion) less-than."}
   (-> Frac Frac Bit)
   ("lux f64 <" reference sample))
 
 (def: .public (<= reference sample)
-  {#.doc "Frac(tion) less-than or equal."}
   (-> Frac Frac Bit)
   (or ("lux f64 <" reference sample)
       ("lux f64 =" reference sample)))
 
 (def: .public (> reference sample)
-  {#.doc "Frac(tion) greater-than."}
   (-> Frac Frac Bit)
   ("lux f64 <" sample reference))
 
 (def: .public (>= reference sample)
-  {#.doc "Frac(tion) greater-than or equal."}
   (-> Frac Frac Bit)
   (or ("lux f64 <" sample reference)
       ("lux f64 =" sample reference)))
@@ -59,17 +54,16 @@
   [..= zero?]
   )
 
-(template [<name> <op> <doc>]
+(template [<name> <op>]
   [(def: .public (<name> param subject)
-     {#.doc <doc>}
      (-> Frac Frac Frac)
      (<op> param subject))]
 
-  [+ "lux f64 +" "Frac(tion) addition."]
-  [- "lux f64 -" "Frac(tion) substraction."]
-  [* "lux f64 *" "Frac(tion) multiplication."]
-  [/ "lux f64 /" "Frac(tion) division."]
-  [% "lux f64 %" "Frac(tion) remainder."]
+  [+ "lux f64 +"]
+  [- "lux f64 -"]
+  [* "lux f64 *"]
+  [/ "lux f64 /"]
+  [% "lux f64 %"]
   )
 
 (def: .public (/% param subject)
@@ -81,32 +75,31 @@
   (-> Frac Frac)
   (..* -1.0))
 
-(def: .public (abs x)
+(def: .public (abs it)
   (-> Frac Frac)
-  (if (..< +0.0 x)
-    (..* -1.0 x)
-    x))
+  (if (..< +0.0 it)
+    (..* -1.0 it)
+    it))
 
-(def: .public (signum x)
+(def: .public (signum it)
   (-> Frac Frac)
-  (cond (..= +0.0 x) +0.0
-        (..< +0.0 x) -1.0
+  (cond (..= +0.0 it) +0.0
+        (..< +0.0 it) -1.0
         ... else
         +1.0))
 
 (def: min_exponent -1022)
 (def: max_exponent (//int.frac +1023))
 
-(template [<name> <test> <doc>]
+(template [<name> <test>]
   [(def: .public (<name> left right)
-     {#.doc <doc>}
      (-> Frac Frac Frac)
      (if (<test> right left)
        left
        right))]
 
-  [min ..< "Frac(tion) minimum."]
-  [max ..> "Frac(tion) minimum."]
+  [min ..<]
+  [max ..>]
   )
 
 (def: .public nat
@@ -170,36 +163,33 @@
   [maximum        ..max (..* -1.0 ..biggest)]
   )
 
-(template [<name> <numerator> <doc>]
+(template [<name> <numerator>]
   [(def: .public <name>
-     {#.doc <doc>}
      Frac
      (../ +0.0 <numerator>))]
 
-  [not_a_number      +0.0 "Not a number."]
-  [positive_infinity +1.0 "Positive infinity."]
+  [not_a_number      +0.0]
+  [positive_infinity +1.0]
   )
 
 (def: .public negative_infinity
-  {#.doc "Negative infinity."}
   Frac
   (..* -1.0 ..positive_infinity))
 
-(def: .public (not_a_number? number)
-  {#.doc "Tests whether a frac is actually not-a-number."}
+(def: .public (not_a_number? it)
   (-> Frac Bit)
-  (not (..= number number)))
+  (not (..= it it)))
 
-(def: .public (number? value)
+(def: .public (number? it)
   (-> Frac Bit)
-  (not (or (..not_a_number? value)
-           (..= ..positive_infinity value)
-           (..= ..negative_infinity value))))
+  (not (or (..not_a_number? it)
+           (..= ..positive_infinity it)
+           (..= ..negative_infinity it))))
 
 (implementation: .public decimal
   (Codec Text Frac)
   
-  (def: (encode x)
+  (def: (encoded x)
     (case x
       -0.0 (let [output ("lux f64 encode" x)]
              (if (text.starts_with? "-" output)
@@ -209,7 +199,7 @@
           ("lux f64 encode" x)
           ("lux text concat" "+" ("lux f64 encode" x)))))
 
-  (def: (decode input)
+  (def: (decoded input)
     (case ("lux f64 decode" [input])
       (#.Some value)
       (#try.Success value)
@@ -232,7 +222,7 @@
 (template [<cast> <hex> <name>]
   [(def: <name>
      (|> <hex>
-         (\ //nat.hex decode)
+         (\ //nat.hex decoded)
          try.trusted
          <cast>))]
 
@@ -247,19 +237,19 @@
 (def: smallest_exponent
   (..log/2 ..smallest))
 
-(def: .public (bits input)
+(def: .public (bits it)
   (-> Frac I64)
-  (.i64 (cond (..not_a_number? input)
+  (.i64 (cond (..not_a_number? it)
               ..not_a_number_bits
 
-              (..= positive_infinity input)
+              (..= positive_infinity it)
               ..positive_infinity_bits
 
-              (..= negative_infinity input)
+              (..= negative_infinity it)
               ..negative_infinity_bits
 
-              (..= +0.0 input)
-              (let [reciprocal (../ input +1.0)]
+              (..= +0.0 it)
+              (let [reciprocal (../ it +1.0)]
                 (if (..= positive_infinity reciprocal)
                   ... Positive zero
                   ..positive_zero_bits
@@ -267,11 +257,11 @@
                   ..negative_zero_bits))
 
               ... else
-              (let [sign_bit (if (..< -0.0 input)
+              (let [sign_bit (if (..< -0.0 it)
                                1
                                0)
-                    input (..abs input)
-                    exponent (|> input
+                    it (..abs it)
+                    exponent (|> it
                                  ..log/2
                                  ///.floor
                                  (..min ..max_exponent))
@@ -280,7 +270,7 @@
                               (..+ (..min +0.0 min_gap))
                               (..- exponent))
                     max_gap (..- ..max_exponent power)
-                    mantissa (|> input
+                    mantissa (|> it
                                  (..* (///.pow (..min ..max_exponent power) +2.0))
                                  (..* (if (..> +0.0 max_gap)
                                         (///.pow max_gap +2.0)
@@ -310,11 +300,11 @@
   [sign     1               ..sign_offset]
   )
 
-(def: .public (of_bits input)
+(def: .public (of_bits it)
   (-> I64 Frac)
-  (case [(: Nat (..exponent input))
-         (: Nat (..mantissa input))
-         (: Nat (..sign input))]
+  (case [(: Nat (..exponent it))
+         (: Nat (..mantissa it))
+         (: Nat (..sign it))]
     (^ [(static ..special_exponent_bits) 0 0])
     ..positive_infinity
 
@@ -362,7 +352,7 @@
                 after_length (//nat.- after_offset ("lux text size" representation))]
           exponent (|> representation
                        ("lux text clip" after_offset after_length)
-                       (\ codec decode))]
+                       (\ codec decoded))]
          (in [("lux text clip" 0 split_index representation)
               (//int.* <factor> (.int exponent))]))])
     ([+1 (^or [(#.Some split_index) #.None #.None #.None]
@@ -377,7 +367,7 @@
   [(implementation: .public <struct>
      (Codec Text Frac)
      
-     (def: (encode value)
+     (def: (encoded value)
        (let [bits (..bits value)
              mantissa (..mantissa bits)
              exponent (//int.- (.int ..double_bias) (..exponent bits))
@@ -387,11 +377,11 @@
                1 "-"
                0 "+"
                _ (undefined))
-             (\ <nat> encode (.nat mantissa))
+             (\ <nat> encoded (.nat mantissa))
              ".0E"
-             (\ <int> encode exponent))))
+             (\ <int> encoded exponent))))
 
-     (def: (decode representation)
+     (def: (decoded representation)
        (let [negative? (text.starts_with? "-" representation)
              positive? (text.starts_with? "+" representation)]
          (if (or negative? positive?)
@@ -404,16 +394,16 @@
                                          after_length (//nat.- after_offset ("lux text size" mantissa))]
                                    decimal (|> mantissa
                                                ("lux text clip" after_offset after_length)
-                                               (\ <nat> decode))]
+                                               (\ <nat> decoded))]
                                   (in [("lux text clip" 0 split_index mantissa)
                                        decimal]))
 
                                 #.None
                                 (#try.Failure ("lux text concat" <error> representation)))
               .let [whole ("lux text clip" 1 (-- ("lux text size" whole)) whole)]
-              mantissa (\ <nat> decode (case decimal
-                                         0 whole
-                                         _ ("lux text concat" whole (\ <nat> encode decimal))))
+              mantissa (\ <nat> decoded (case decimal
+                                          0 whole
+                                          _ ("lux text concat" whole (\ <nat> encoded decimal))))
               .let [sign (if negative? 1 0)]]
              (in (..of_bits
                   ($_ //i64.or
diff --git a/stdlib/source/library/lux/math/number/i16.lux b/stdlib/source/library/lux/math/number/i16.lux
index 59d067f31..9bbfc83a7 100644
--- a/stdlib/source/library/lux/math/number/i16.lux
+++ b/stdlib/source/library/lux/math/number/i16.lux
@@ -13,7 +13,6 @@
   (maybe.trusted (i64.sub 16)))
 
 (def: .public I16
-  {#.doc (example "A 16-bit integer.")}
   (:by_example [size]
                (Sub size)
                ..sub
@@ -23,4 +22,4 @@
 (def: .public equivalence (Equivalence I16) (\ ..sub &equivalence))
 (def: .public width Nat (\ ..sub width))
 (def: .public i16 (-> I64 I16) (\ ..sub narrow))
-(def: .public i64 (-> I16 I64) (\ ..sub widen))
+(def: .public i64 (-> I16 I64) (\ ..sub wide))
diff --git a/stdlib/source/library/lux/math/number/i32.lux b/stdlib/source/library/lux/math/number/i32.lux
index 75e6c6ec3..63edd2244 100644
--- a/stdlib/source/library/lux/math/number/i32.lux
+++ b/stdlib/source/library/lux/math/number/i32.lux
@@ -13,7 +13,6 @@
   (maybe.trusted (i64.sub 32)))
 
 (def: .public I32
-  {#.doc (example "A 32-bit integer.")}
   (:by_example [size]
                (Sub size)
                ..sub
@@ -23,4 +22,4 @@
 (def: .public equivalence (Equivalence I32) (\ ..sub &equivalence))
 (def: .public width Nat (\ ..sub width))
 (def: .public i32 (-> I64 I32) (\ ..sub narrow))
-(def: .public i64 (-> I32 I64) (\ ..sub widen))
+(def: .public i64 (-> I32 I64) (\ ..sub wide))
diff --git a/stdlib/source/library/lux/math/number/i64.lux b/stdlib/source/library/lux/math/number/i64.lux
index 42c08e00a..3f02cb4bd 100644
--- a/stdlib/source/library/lux/math/number/i64.lux
+++ b/stdlib/source/library/lux/math/number/i64.lux
@@ -21,37 +21,32 @@
   (n.* ..bits_per_byte
        ..bytes_per_i64))
 
-(template [<parameter_type> <name> <op> <doc>]
+(template [<parameter_type> <name> <op>]
   [(def: .public (<name> parameter subject)
-     {#.doc <doc>}
      (All [s] (-> <parameter_type> (I64 s) (I64 s)))
      (<op> parameter subject))]
 
-  [(I64 Any) or          "lux i64 or"          "Bitwise or."]
-  [(I64 Any) xor         "lux i64 xor"         "Bitwise xor."]
-  [(I64 Any) and         "lux i64 and"         "Bitwise and."]
+  [(I64 Any) or          "lux i64 or"]
+  [(I64 Any) xor         "lux i64 xor"]
+  [(I64 Any) and         "lux i64 and"]
   
-  [Nat       left_shifted  "lux i64 left-shift"  "Bitwise left-shift."]
-  [Nat       right_shifted "lux i64 right-shift" "Unsigned/logic bitwise right-shift."]
+  [Nat       left_shifted  "lux i64 left-shift"]
+  [Nat       right_shifted "lux i64 right-shift"]
   )
 
 ... https://en.wikipedia.org/wiki/Mask_(computing)
 (type: .public Mask
-  {#.doc (example "A pattern of bits that can be imposed on I64 values.")}
   I64)
 
 (def: .public (bit position)
-  {#.doc (example "A mask with only a specific bit set.")}
   (-> Nat Mask)
   (|> 1 .i64 (..left_shifted (n.% ..width position))))
 
 (def: .public sign
-  {#.doc (example "A mask for the sign bit of ints.")}
   Mask
   (..bit (-- ..width)))
 
 (def: .public not
-  {#.doc "Bitwise negation."}
   (All [s] (-> (I64 s) (I64 s)))
   (..xor (.i64 (-- 0))))
 
@@ -64,7 +59,6 @@
   (..not ..false))
 
 (def: .public (mask amount_of_bits)
-  {#.doc (example "Mask a block of bits of the specified size.")}
   (-> Nat Mask)
   (case amount_of_bits
     0 ..false
@@ -76,11 +70,10 @@
   (-> Nat Nat Nat)
   (|> value (right_shifted shift) (n.+ value)))
 
-(def: .public (ones subject)
-  {#.doc "Count the number of 1s in a bit-map."}
+(def: .public (ones it)
   (-> (I64 Any) Nat)
-  (let [ones' (n.- (|> subject (right_shifted 1) (..and 6148914691236517205) i64)
-                   (i64 subject))]
+  (let [ones' (n.- (|> it (right_shifted 1) (..and 6148914691236517205) i64)
+                   (i64 it))]
     (|> ones'
         (right_shifted 2) (..and 3689348814741910323) (n.+ (..and 3689348814741910323 ones'))
         (with_shift 4) (..and 1085102592571150095)
@@ -90,18 +83,16 @@
         (..and 127))))
 
 (def: .public (zero index input)
-  {#.doc "Clear bit at the given index."}
   (All [s] (-> Nat (I64 s) (I64 s)))
   (|> index ..bit ..not (..and input)))
 
-(template [<name> <op> <doc>]
+(template [<name> <op>]
   [(def: .public (<name> index input)
-     {#.doc <doc>}
      (All [s] (-> Nat (I64 s) (I64 s)))
      (|> index ..bit (<op> input)))]
 
-  [one     ..or  "Set bit at given index."]
-  [flipped ..xor "Flip bit at given index."]
+  [one     ..or]
+  [flipped ..xor]
   )
 
 (def: .public (one? index input)
@@ -123,7 +114,6 @@
   )
 
 (def: .public (region offset size)
-  {#.doc (example "A mask for a block of bits of the given size, starting at the given offset.")}
   (-> Nat Nat Mask)
   (..left_rotated offset (..mask size)))
 
@@ -169,7 +159,7 @@
                                                  (repetitions size "1")
                                                  (repetitions size "0")))
 
-                           high (try.trusted (\ n.binary decode pattern))
+                           high (try.trusted (\ n.binary decoded pattern))
                            low (..right_rotated size high)]
                        (function (_ value)
                          (..or (..right_shifted size (..and high value))
@@ -189,8 +179,6 @@
          swap/01)))
 
 (interface: .public (Sub size)
-  {#.doc (example "A sub-space of I64 with a reduce amount of bits.")}
-  
   (: (Equivalence (I64 size))
      &equivalence)
   (: Nat
@@ -198,10 +186,9 @@
   (: (-> I64 (I64 size))
      narrow)
   (: (-> (I64 size) I64)
-     widen))
+     wide))
 
 (def: .public (sub width)
-  {#.doc (example "Given a width in the interval (0,64), yields an implementation for integers of that width.")}
   (Ex [size] (-> Nat (Maybe (Sub size))))
   (if (.and (n.> 0 width)
             (n.< ..width width))
@@ -216,7 +203,7 @@
                   (def: (narrow value)
                     (..or (|> value (..and ..sign) (..right_shifted sign_shift))
                           (|> value (..and mantissa))))
-                  (def: (widen value)
+                  (def: (wide value)
                     (.i64 (case (.nat (..and sign value))
                             0 value
                             _ (..or co_mantissa value))))))))
diff --git a/stdlib/source/library/lux/math/number/i8.lux b/stdlib/source/library/lux/math/number/i8.lux
index e0721117c..7fb3e8e8b 100644
--- a/stdlib/source/library/lux/math/number/i8.lux
+++ b/stdlib/source/library/lux/math/number/i8.lux
@@ -13,7 +13,6 @@
   (maybe.trusted (i64.sub 8)))
 
 (def: .public I8
-  {#.doc (example "An 8-bit integer.")}
   (:by_example [size]
                (Sub size)
                ..sub
@@ -23,4 +22,4 @@
 (def: .public equivalence (Equivalence I8) (\ ..sub &equivalence))
 (def: .public width Nat (\ ..sub width))
 (def: .public i8 (-> I64 I8) (\ ..sub narrow))
-(def: .public i64 (-> I8 I64) (\ ..sub widen))
+(def: .public i64 (-> I8 I64) (\ ..sub wide))
diff --git a/stdlib/source/library/lux/math/number/int.lux b/stdlib/source/library/lux/math/number/int.lux
index d5546a4a5..657780bd9 100644
--- a/stdlib/source/library/lux/math/number/int.lux
+++ b/stdlib/source/library/lux/math/number/int.lux
@@ -20,29 +20,24 @@
    ["#." i64]])
 
 (def: .public (= reference sample)
-  {#.doc "Int(eger) equivalence."}
   (-> Int Int Bit)
   ("lux i64 =" reference sample))
 
 (def: .public (< reference sample)
-  {#.doc "Int(eger) less-than."}
   (-> Int Int Bit)
   ("lux i64 <" reference sample))
 
 (def: .public (<= reference sample)
-  {#.doc "Int(eger) less-than or equal."}
   (-> Int Int Bit)
   (if ("lux i64 <" reference sample)
     #1
     ("lux i64 =" reference sample)))
 
 (def: .public (> reference sample)
-  {#.doc "Int(eger) greater-than."}
   (-> Int Int Bit)
   ("lux i64 <" sample reference))
 
 (def: .public (>= reference sample)
-  {#.doc "Int(eger) greater-than or equal."}
   (-> Int Int Bit)
   (if ("lux i64 <" sample reference)
     #1
@@ -60,7 +55,6 @@
 
 (template [<name> <test> <doc>]
   [(def: .public (<name> left right)
-     {#.doc <doc>}
      (-> Int Int Int)
      (if (<test> right left)
        left
@@ -72,7 +66,6 @@
 
 (template [<name> <op> <doc>]
   [(def: .public (<name> param subject)
-     {#.doc <doc>}
      (-> Int Int Int)
      (<op> param subject))]
 
@@ -84,35 +77,29 @@
   )
 
 (def: .public (/% param subject)
-  {#.doc "Int(eger) [division remainder]."}
   (-> Int Int [Int Int])
   [(../ param subject)
    (..% param subject)])
 
-(def: .public (opposite value)
-  {#.doc (example "A value of equal magnitude and opposite sign.")}
+(def: .public (opposite it)
   (-> Int Int)
-  (..- value +0))
+  (..- it +0))
 
-(def: .public (abs x)
-  {#.doc (example "A value of equal magnitude and positive sign.")}
+(def: .public (abs it)
   (-> Int Int)
-  (if (..< +0 x)
-    (..* -1 x)
-    x))
+  (if (..< +0 it)
+    (..* -1 it)
+    it))
 
-(def: .public (signum x)
-  {#.doc (example "A value (either -1, 0 or +0) which represents the sign.")}
+(def: .public (signum it)
   (-> Int Int)
-  (cond (..= +0 x) +0
-        (..< +0 x) -1
+  (cond (..= +0 it) +0
+        (..< +0 it) -1
         ... else
         +1))
 
 ... https://rob.conery.io/2018/08/21/mod-and-remainder-are-not-the-same/
 (def: .public (mod divisor dividend)
-  {#.doc (example "Integer modulo."
-                  "Note: The modulo and the remainder are not the same.")}
   (All [m] (-> Int Int Int))
   (let [remainder (..% divisor dividend)]
     (if (or (and (..< +0 divisor)
@@ -132,7 +119,6 @@
 
 ... https://en.wikipedia.org/wiki/Greatest_common_divisor
 (def: .public (gcd a b)
-  {#.doc "Greatest Common Divisor."}
   (-> Int Int Int)
   (case b
     +0 a
@@ -144,7 +130,6 @@
 
 ... https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
 (def: .public (extended_gcd a b)
-  {#.doc "Extended euclidean algorithm."}
   (-> Int Int [[Int Int] Int])
   (loop [x +1 x1 +0
          y +0 y1 +1
@@ -158,7 +143,6 @@
 
 ... https://en.wikipedia.org/wiki/Least_common_multiple
 (def: .public (lcm a b)
-  {#.doc "Least Common Multiple."}
   (-> Int Int Int)
   (case [a b]
     (^or [_ +0] [+0 _])
@@ -223,25 +207,25 @@
   [(implementation: .public <struct>
      (Codec Text Int)
      
-     (def: (encode value)
+     (def: (encoded value)
        (if (..< +0 value)
-         (|> value ++ ..opposite .nat ++ (\ <codec> encode) ("lux text concat" ..-sign))
-         (|> value .nat (\ <codec> encode) ("lux text concat" ..+sign))))
+         (|> value ++ ..opposite .nat ++ (\ <codec> encoded) ("lux text concat" ..-sign))
+         (|> value .nat (\ <codec> encoded) ("lux text concat" ..+sign))))
 
-     (def: (decode repr)
+     (def: (decoded repr)
        (let [input_size ("lux text size" repr)]
          (if (//nat.> 1 input_size)
            (case ("lux text clip" 0 1 repr)
              (^ (static ..+sign))
              (|> repr
                  ("lux text clip" 1 (-- input_size))
-                 (\ <codec> decode)
+                 (\ <codec> decoded)
                  (\ try.functor map .int))
              
              (^ (static ..-sign))
              (|> repr
                  ("lux text clip" 1 (-- input_size))
-                 (\ <codec> decode)
+                 (\ <codec> decoded)
                  (\ try.functor map (|>> -- .int ..opposite --)))
              
              _
@@ -261,7 +245,6 @@
   (def: hash .nat))
 
 (def: .public (right_shifted parameter subject)
-  {#.doc "Signed/arithmetic bitwise right-shift."}
   (-> Nat Int Int)
   (//i64.or (//i64.and //i64.sign subject)
             (//i64.right_shifted parameter subject)))
diff --git a/stdlib/source/library/lux/math/number/nat.lux b/stdlib/source/library/lux/math/number/nat.lux
index c72289e0d..2ec9333b7 100644
--- a/stdlib/source/library/lux/math/number/nat.lux
+++ b/stdlib/source/library/lux/math/number/nat.lux
@@ -14,15 +14,14 @@
      ["." maybe]
      ["." try (#+ Try)]]]])
 
-(template [<extension> <output> <name> <documentation>]
+(template [<extension> <output> <name>]
   [(def: .public (<name> parameter subject)
-     {#.doc <documentation>}
      (-> Nat Nat <output>)
      (<extension> parameter subject))]
 
-  ["lux i64 =" Bit = "Nat(ural) equivalence."]
-  ["lux i64 +" Nat + "Nat(ural) addition."]
-  ["lux i64 -" Nat - "Nat(ural) substraction."]
+  ["lux i64 =" Bit =]
+  ["lux i64 +" Nat +]
+  ["lux i64 -" Nat -]
   )
 
 (def: high
@@ -35,7 +34,6 @@
     (|>> ("lux i64 and" mask))))
 
 (def: .public (< reference sample)
-  {#.doc "Nat(ural) less-than."}
   (-> Nat Nat Bit)
   (let [referenceH (..high reference)
         sampleH (..high sample)]
@@ -48,38 +46,33 @@
         #0))))
 
 (def: .public (<= reference sample)
-  {#.doc "Nat(ural) less-than or equal."}
   (-> Nat Nat Bit)
   (if (..< reference sample)
     #1
     ("lux i64 =" reference sample)))
 
 (def: .public (> reference sample)
-  {#.doc "Nat(ural) greater-than."}
   (-> Nat Nat Bit)
   (..< sample reference))
 
 (def: .public (>= reference sample)
-  {#.doc "Nat(ural) greater-than or equal."}
   (-> Nat Nat Bit)
   (if (..< sample reference)
     #1
     ("lux i64 =" reference sample)))
 
-(template [<name> <test> <doc>]
+(template [<name> <test>]
   [(def: .public (<name> left right)
-     {#.doc <doc>}
      (-> Nat Nat Nat)
      (if (<test> right left)
        left
        right))]
 
-  [min ..< "Nat(ural) minimum."]
-  [max ..> "Nat(ural) maximum."]
+  [min ..<]
+  [max ..>]
   )
 
 (def: .public (* parameter subject)
-  {#.doc "Nat(ural) multiplication."}
   (-> Nat Nat Nat)
   (:as Nat
        ("lux i64 *"
@@ -87,7 +80,6 @@
         (:as Int subject))))
 
 (def: .public (/ parameter subject)
-  {#.doc "Nat(ural) division."}
   (-> Nat Nat Nat)
   (if ("lux i64 <" +0 (:as Int parameter))
     (if (..< parameter subject)
@@ -106,7 +98,6 @@
         ("lux i64 +" 1 quotient)))))
 
 (def: .public (/% parameter subject)
-  {#.doc "Nat(ural) [division remainder]."}
   (-> Nat Nat [Nat Nat])
   (let [quotient (../ parameter subject)
         flat ("lux i64 *"
@@ -115,7 +106,6 @@
     [quotient ("lux i64 -" flat subject)]))
 
 (def: .public (% parameter subject)
-  {#.doc "Nat(ural) remainder."}
   (-> Nat Nat Nat)
   (let [flat ("lux i64 *"
               (:as Int parameter)
@@ -123,7 +113,6 @@
     ("lux i64 -" flat subject)))
 
 (def: .public (gcd a b)
-  {#.doc "Greatest Common Divisor."}
   (-> Nat Nat Nat)
   (case b
     0 a
@@ -134,7 +123,6 @@
   (..= 1 (..gcd a b)))
 
 (def: .public (lcm a b)
-  {#.doc "Least Common Multiple."}
   (-> Nat Nat Nat)
   (case [a b]
     (^or [_ 0] [0 _])
@@ -302,7 +290,7 @@
   [(implementation: .public <struct>
      (Codec Text Nat)
      
-     (def: encode
+     (def: encoded
        (let [mask (|> 1 ("lux i64 left-shift" <shift>) --)]
          (function (_ value)
            (loop [input value
@@ -317,7 +305,7 @@
                  input'
                  (recur input' output')))))))
 
-     (def: (decode repr)
+     (def: (decoded repr)
        (let [input_size ("lux text size" repr)]
          (if (..> 0 input_size)
            (loop [idx 0
@@ -343,7 +331,7 @@
 (implementation: .public decimal
   (Codec Text Nat)
   
-  (def: (encode value)
+  (def: (encoded value)
     (loop [input value
            output ""]
       (let [digit (decimal_character (..% 10 input))
@@ -355,7 +343,7 @@
           input'
           (recur input' output')))))
 
-  (def: (decode repr)
+  (def: (decoded repr)
     (let [input_size ("lux text size" repr)]
       (with_expansions [<failure> (#try.Failure ("lux text concat" "Invalid decimal syntax for Nat: " repr))]
         (if (..> 0 input_size)
diff --git a/stdlib/source/library/lux/math/number/ratio.lux b/stdlib/source/library/lux/math/number/ratio.lux
index 5d5962b47..6ab6d1349 100644
--- a/stdlib/source/library/lux/math/number/ratio.lux
+++ b/stdlib/source/library/lux/math/number/ratio.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Rational numbers."}
   [library
    [lux (#- nat)
     [abstract
@@ -24,7 +23,6 @@
    ["n" nat ("#\." decimal)]])
 
 (type: .public Ratio
-  {#.doc (example "An unsigned ratio of numbers.")}
   {#numerator Nat
    #denominator Nat})
 
@@ -42,10 +40,6 @@
 
 (syntax: .public (ratio [numerator <code>.any
                          ?denominator (<>.maybe <code>.any)])
-  {#.doc (example "Rational literals."
-                  (ratio numerator denominator)
-                  "The denominator can be omitted if it is 1."
-                  (ratio numerator))}
   (in (list (` ((~! ..normal) {#..numerator (~ numerator)
                                #..denominator (~ (maybe.else (' 1) ?denominator))})))))
 
@@ -136,15 +130,15 @@
 (implementation: .public codec
   (Codec Text Ratio)
   
-  (def: (encode (^slots [#numerator #denominator]))
-    ($_ text\compose (n\encode numerator) ..separator (n\encode denominator)))
+  (def: (encoded (^slots [#numerator #denominator]))
+    ($_ text\compose (n\encoded numerator) ..separator (n\encoded denominator)))
 
-  (def: (decode input)
+  (def: (decoded input)
     (case (text.split_by ..separator input)
       (#.Some [num denom])
       (do try.monad
-        [numerator (n\decode num)
-         denominator (n\decode denom)]
+        [numerator (n\decoded num)
+         denominator (n\decoded denom)]
         (in (normal {#numerator numerator
                      #denominator denominator})))
       
diff --git a/stdlib/source/library/lux/math/number/rev.lux b/stdlib/source/library/lux/math/number/rev.lux
index c7d5641ce..b4bf8bcd2 100644
--- a/stdlib/source/library/lux/math/number/rev.lux
+++ b/stdlib/source/library/lux/math/number/rev.lux
@@ -41,54 +41,47 @@
   )
 
 (def: .public (= reference sample)
-  {#.doc "Rev(olution) equivalence."}
   (-> Rev Rev Bit)
   ("lux i64 =" reference sample))
 
 (def: .public (< reference sample)
-  {#.doc "Rev(olution) less-than."}
   (-> Rev Rev Bit)
   (//nat.< (.nat reference) (.nat sample)))
 
 (def: .public (<= reference sample)
-  {#.doc "Rev(olution) less-than or equal."}
   (-> Rev Rev Bit)
   (if (//nat.< (.nat reference) (.nat sample))
     true
     ("lux i64 =" reference sample)))
 
 (def: .public (> reference sample)
-  {#.doc "Rev(olution) greater-than."}
   (-> Rev Rev Bit)
   (..< sample reference))
 
 (def: .public (>= reference sample)
-  {#.doc "Rev(olution) greater-than or equal."}
   (-> Rev Rev Bit)
   (if (..< sample reference)
     true
     ("lux i64 =" reference sample)))
 
-(template [<name> <test> <doc>]
+(template [<name> <test>]
   [(def: .public (<name> left right)
-     {#.doc <doc>}
      (-> Rev Rev Rev)
      (if (<test> right left)
        left
        right))]
 
-  [min ..< "Rev(olution) minimum."]
-  [max ..> "Rev(olution) maximum."]
+  [min ..<]
+  [max ..>]
   )
 
-(template [<name> <op> <doc>]
+(template [<name> <op>]
   [(def: .public (<name> param subject)
-     {#.doc <doc>}
      (-> Rev Rev Rev)
      (<op> param subject))]
 
-  [+ "lux i64 +" "Rev(olution) addition."]
-  [- "lux i64 -" "Rev(olution) substraction."]
+  [+ "lux i64 +"]
+  [- "lux i64 -"]
   )
 
 (def: high
@@ -101,7 +94,6 @@
     (|>> ("lux i64 and" mask))))
 
 (def: .public (* param subject)
-  {#.doc "Rev(olution) multiplication."}
   (-> Rev Rev Rev)
   (let [subjectH (..high subject)
         subjectL (..low subject)
@@ -133,14 +125,12 @@
 
 (with_expansions [<least_significant_bit> 1]
   (def: .public (reciprocal numerator)
-    {#.doc "Rev(olution) reciprocal of a Nat(ural)."}
     (-> Nat Rev)
     (.rev (case (: Nat ("lux i64 and" <least_significant_bit> numerator))
             0 (..even_reciprocal numerator)
             _ (..odd_reciprocal numerator))))
   
   (def: .public (/ param subject)
-    {#.doc "Rev(olution) division."}
     (-> Rev Rev Rev)
     (if ("lux i64 =" +0 param)
       (panic! "Cannot divide Rev by zero!")
@@ -149,14 +139,13 @@
                          _ (..odd_reciprocal (.nat param)))]
         (.rev (//nat.* reciprocal (.nat subject)))))))
 
-(template [<operator> <name> <output> <output_type> <documentation>]
+(template [<operator> <name> <output> <output_type>]
   [(def: .public (<name> param subject)
-     {#.doc <documentation>}
      (-> Rev Rev <output_type>)
      (<output> (<operator> (.nat param) (.nat subject))))]
 
-  [//nat.% % .rev Rev "Rev(olution) remainder."]
-  [//nat./ ratio |> Nat "Ratio between two rev(olution)s."]
+  [//nat.% % .rev Rev]
+  [//nat./ ratio |> Nat]
   )
 
 (template [<operator> <name>]
@@ -237,8 +226,8 @@
      (implementation: .public <struct>
        (Codec Text Rev)
        
-       (def: (encode value)
-         (let [raw_output (\ <codec> encode (.nat value))
+       (def: (encoded value)
+         (let [raw_output (\ <codec> encoded (.nat value))
                max_num_chars (//nat.+ (//nat./ <char_bit_size> //i64.width)
                                       (case (//nat.% <char_bit_size> //i64.width)
                                         0 0
@@ -255,12 +244,12 @@
                ("lux text concat" zero_padding)
                ("lux text concat" "."))))
 
-       (def: (decode repr)
+       (def: (decoded repr)
          (let [repr_size ("lux text size" repr)]
            (if (//nat.> 1 repr_size)
              (case ("lux text char" 0 repr)
                (^ (char "."))
-               (case (\ <codec> decode (..decimals repr))
+               (case (\ <codec> decoded (..decimals repr))
                  (#try.Success output)
                  (#try.Success (.rev output))
 
@@ -340,7 +329,7 @@
           (recur (-- idx)
                  false
                  ("lux text concat"
-                  (\ //nat.decimal encode digit)
+                  (\ //nat.decimal encoded digit)
                   output))))
       (if all_zeroes?
         "0"
@@ -412,7 +401,7 @@
 (implementation: .public decimal
   (Codec Text Rev)
   
-  (def: (encode input)
+  (def: (encoded input)
     (case (.nat input)
       0
       ".0"
@@ -432,7 +421,7 @@
             ("lux text concat" "." (..format digits))
             )))))
 
-  (def: (decode input)
+  (def: (decoded input)
     (let [dotted? (case ("lux text index" 0 "." input)
                     (#.Some 0)
                     true
diff --git a/stdlib/source/library/lux/math/random.lux b/stdlib/source/library/lux/math/random.lux
index 6b61b5159..3e9b14b8c 100644
--- a/stdlib/source/library/lux/math/random.lux
+++ b/stdlib/source/library/lux/math/random.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Pseudo-random number generation (PRNG) algorithms."}
   [library
    [lux (#- or and list i64 nat int rev char)
     [abstract
@@ -12,7 +11,7 @@
       ["." unicode #_
        ["#" set]]]
      [collection
-      ["." list ("#\." fold)]
+      ["." list ("#\." mix)]
       ["." array (#+ Array)]
       ["." dictionary (#+ Dictionary)]
       ["." queue (#+ Queue)]
@@ -39,11 +38,9 @@
      [refinement (#+ Refiner Refined)]]]])
 
 (type: .public #rec PRNG
-  {#.doc "An abstract way to represent any PRNG."}
   (-> Any [PRNG I64]))
 
 (type: .public (Random a)
-  {#.doc "A producer of random values based on a PRNG."}
   (-> PRNG [PRNG a]))
 
 (implementation: .public functor
@@ -59,7 +56,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ state)
       (let [[state' f] (ff state)
             [state'' a] (fa state')]
@@ -80,7 +77,6 @@
         (fa state')))))
 
 (def: .public (only pred gen)
-  {#.doc "Retries the generator until the output satisfies a predicate."}
   (All [a] (-> (-> a Bit) (Random a) (Random a)))
   (do ..monad
     [sample gen]
@@ -101,7 +97,6 @@
       (one check random))))
 
 (def: .public (refined refiner gen)
-  {#.doc "Retries the generator until the output can be refined."}
   (All [t r] (-> (Refiner t r) (Random t) (Random (Refined t r))))
   (do ..monad
     [sample gen]
@@ -142,7 +137,6 @@
   (\ ..monad map (|>> .i64 f.of_bits) ..nat))
 
 (def: .public safe_frac
-  {#.doc (example "A number in the interval [0.0,1.0].")}
   (Random Frac)
   (let [mantissa_range (.int (i64.left_shifted 53 1))
         mantissa_max (i.frac (-- mantissa_range))]
@@ -199,7 +193,6 @@
   )
 
 (def: .public (and left right)
-  {#.doc "Sequencing combinator."}
   (All [a b] (-> (Random a) (Random b) (Random [a b])))
   (do ..monad
     [=left left
@@ -207,7 +200,6 @@
     (in [=left =right])))
 
 (def: .public (or left right)
-  {#.doc "Heterogeneous alternative combinator."}
   (All [a b] (-> (Random a) (Random b) (Random (Or a b))))
   (do {! ..monad}
     [? bit]
@@ -220,7 +212,6 @@
         (in (0 #1 =right))))))
 
 (def: .public (either left right)
-  {#.doc "Homogeneous alternative combinator."}
   (All [a] (-> (Random a) (Random a) (Random a)))
   (do ..monad
     [? bit]
@@ -229,7 +220,6 @@
       right)))
 
 (def: .public (rec gen)
-  {#.doc "A combinator for producing recursive random generators."}
   (All [a] (-> (-> (Random a) (Random a)) (Random a)))
   (function (_ state)
     (let [gen' (gen (rec gen))]
@@ -268,7 +258,7 @@
 
   [array Array array.of_list]
   [queue Queue queue.of_list]
-  [stack Stack (list\fold stack.top stack.empty)]
+  [stack Stack (list\mix stack.top stack.empty)]
   )
 
 (def: .public (set hash size value_gen)
@@ -355,8 +345,6 @@
        (return state)])))
 
 (def: .public (pcg_32 [increase seed])
-  {#.doc (example "An implementation of the PCG32 algorithm."
-                  "For more information, please see: http://www.pcg-random.org/")}
   (-> [(I64 Any) (I64 Any)] PRNG)
   (let [magic 6364136223846793005]
     (function (_ _)
@@ -370,8 +358,6 @@
              .i64))])))
 
 (def: .public (xoroshiro_128+ [s0 s1])
-  {#.doc (example "An implementation of the Xoroshiro128+ algorithm."
-                  "For more information, please see: http://xoroshiro.di.unimi.it/")}
   (-> [(I64 Any) (I64 Any)] PRNG)
   (function (_ _)
     [(let [s01 (i64.xor s0 s1)]
@@ -385,7 +371,6 @@
 ... https://en.wikipedia.org/wiki/Xorshift#Initialization
 ... http://xorshift.di.unimi.it/splitmix64.c
 (def: .public split_mix_64
-  {#.doc (example "An implementation of the SplitMix64 algorithm.")}
   (-> Nat PRNG)
   (let [twist (: (-> Nat Nat Nat)
                  (function (_ shift value)
diff --git a/stdlib/source/library/lux/meta.lux b/stdlib/source/library/lux/meta.lux
index 0b4b809fc..13b7d9937 100644
--- a/stdlib/source/library/lux/meta.lux
+++ b/stdlib/source/library/lux/meta.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc "Functions for extracting information from the state of the compiler."}
   [library
    [lux (#- type)
     [abstract
@@ -46,7 +45,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ lux)
       (case (ff lux)
         (#try.Success [lux' f])
@@ -79,13 +78,10 @@
         (ma lux')))))
 
 (def: .public (result' lux action)
-  {#.doc (example "Evaluates a computation that depends on Lux's compiler state."
-                  "Also returns a (potentially modified) compiler state.")}
   (All [a] (-> Lux (Meta a) (Try [Lux a])))
   (action lux))
 
 (def: .public (result lux action)
-  {#.doc (example "Evaluates a computation that depends on Lux's compiler state.")}
   (All [a] (-> Lux (Meta a) (Try a)))
   (case (action lux)
     (#try.Failure error)
@@ -95,7 +91,6 @@
     (#try.Success output)))
 
 (def: .public (either left right)
-  {#.doc "Pick whichever computation succeeds."}
   (All [a] (-> (Meta a) (Meta a) (Meta a)))
   (function (_ lux)
     (case (left lux)
@@ -106,7 +101,6 @@
       (#try.Success [lux' output]))))
 
 (def: .public (assertion message test)
-  {#.doc "Fails with the given message if the test is #0."}
   (-> Text Bit (Meta Any))
   (function (_ lux)
     (if test
@@ -114,14 +108,12 @@
       (#try.Failure message))))
 
 (def: .public (failure error)
-  {#.doc "Fails with the given error message."}
   (All [a]
     (-> Text (Meta a)))
   (function (_ state)
     (#try.Failure (location.with (value@ #.location state) error))))
 
 (def: .public (module name)
-  {#.doc (example "Looks-up a module with the given name.")}
   (-> Text (Meta Module))
   (function (_ lux)
     (case (plist.value name (value@ #.modules lux))
@@ -132,7 +124,6 @@
       (#try.Failure ($_ text\compose "Unknown module: " name)))))
 
 (def: .public current_module_name
-  {#.doc (example "The name of the module currently being compiled, if any.")}
   (Meta Text)
   (function (_ lux)
     (case (value@ #.current_module lux)
@@ -143,7 +134,6 @@
       (#try.Failure "No current module."))))
 
 (def: .public current_module
-  {#.doc (example "The module currently being compiled, if any.")}
   (Meta Module)
   (let [(^open "\.") ..monad]
     (|> ..current_module_name
@@ -160,8 +150,6 @@
         false)))
 
 (def: .public (normal name)
-  {#.doc (example "If given a name without a module prefix, gives it the current module's name as prefix."
-                  "Otherwise, returns the name as-is.")}
   (-> Name (Meta Name))
   (case name
     ["" name]
@@ -191,7 +179,6 @@
         #.None))))
 
 (def: .public (macro full_name)
-  {#.doc (example "Looks-up a macro known by the given name.")}
   (-> Name (Meta (Maybe Macro)))
   (do ..monad
     [[module name] (..normal full_name)]
@@ -206,9 +193,6 @@
            (#try.Success [lux macro]))))))
 
 (def: .public seed
-  {#.doc (example "The current value of a number tracked by the compiler."
-                  "Also increases the value, so it's different next time it is seen."
-                  "This number can be used for generating data 'randomly' during compilation.")}
   (Meta Nat)
   (function (_ lux)
     (#try.Success [(revised@ #.seed ++ lux)
@@ -260,7 +244,6 @@
     (\ ..monad in type)))
 
 (def: .public (var_type name)
-  {#.doc "Looks-up the type of a local variable somewhere in the environment."}
   (-> Text (Meta Type))
   (function (_ lux)
     (let [test (: (-> [Text [Type Any]] Bit)
@@ -301,7 +284,6 @@
        (text.interposed ..listing_separator)))
 
 (def: .public (definition name)
-  {#.doc "Looks-up a definition's whole data in the available modules (including the current one)."}
   (-> Name (Meta Global))
   (do ..monad
     [name (..normal name)
@@ -323,7 +305,7 @@
                                     (list\map product.left)
                                     ..module_listing)]
           (#try.Failure ($_ text\compose
-                            "Unknown definition: " (name\encode name) text.new_line
+                            "Unknown definition: " (name\encoded name) text.new_line
                             "    Current module: " current_module text.new_line
                             (case (plist.value current_module (value@ #.modules lux))
                               (#.Some this_module)
@@ -337,7 +319,7 @@
                                                                                  (#.Definition [exported? _ _ _])
                                                                                  (if (and exported?
                                                                                           (text\= normal_short def_name))
-                                                                                   (#.Some (name\encode [module_name def_name]))
+                                                                                   (#.Some (name\encoded [module_name def_name]))
                                                                                    #.None)
 
                                                                                  (#.Alias _)
@@ -363,8 +345,6 @@
                             " All known modules: " all_known_modules text.new_line)))))))
 
 (def: .public (export name)
-  {#.doc (example "Looks-up a definition in the available modules (including the current one)."
-                  "The look-up only succeeds if the definition has been exported.")}
   (-> Name (Meta Definition))
   (do ..monad
     [definition (..definition name)]
@@ -372,16 +352,15 @@
       (#.Left de_aliased)
       (failure ($_ text\compose
                    "Aliases are not considered exports: "
-                   (name\encode name)))
+                   (name\encoded name)))
       
       (#.Right definition)
       (let [[exported? def_type def_data def_value] definition]
         (if exported?
           (in definition)
-          (failure ($_ text\compose "Definition is not an export: " (name\encode name))))))))
+          (failure ($_ text\compose "Definition is not an export: " (name\encoded name))))))))
 
 (def: .public (definition_type name)
-  {#.doc "Looks-up a definition's type in the available modules (including the current one)."}
   (-> Name (Meta Type))
   (do ..monad
     [definition (definition name)]
@@ -393,7 +372,6 @@
       (clean_type def_type))))
 
 (def: .public (type name)
-  {#.doc "Looks-up the type of either a local variable or a definition."}
   (-> Name (Meta Type))
   (case name
     ["" _name]
@@ -404,7 +382,6 @@
     (definition_type name)))
 
 (def: .public (type_definition name)
-  {#.doc "Finds the value of a type definition (such as Int, Any or Lux)."}
   (-> Name (Meta Type))
   (do ..monad
     [definition (definition name)]
@@ -419,10 +396,9 @@
                    (type_code .Type)
                    (type_code def_type)))
           (in (:as Type def_value))
-          (..failure ($_ text\compose "Definition is not a type: " (name\encode name))))))))
+          (..failure ($_ text\compose "Definition is not a type: " (name\encoded name))))))))
 
 (def: .public (globals module)
-  {#.doc "The entire list of globals in a module (including the non-exported/private ones)."}
   (-> Text (Meta (List [Text Global])))
   (function (_ lux)
     (case (plist.value module (value@ #.modules lux))
@@ -433,7 +409,6 @@
       (#try.Success [lux (value@ #.definitions module)]))))
 
 (def: .public (definitions module)
-  {#.doc "The entire list of definitions in a module (including the non-exported/private ones)."}
   (-> Text (Meta (List [Text Definition])))
   (\ ..monad map
      (list.all (function (_ [name global])
@@ -446,7 +421,6 @@
      (..globals module)))
 
 (def: .public (exports module_name)
-  {#.doc "All the exported definitions in a module."}
   (-> Text (Meta (List [Text Definition])))
   (do ..monad
     [constants (..definitions module_name)]
@@ -457,7 +431,6 @@
             (list))))))
 
 (def: .public modules
-  {#.doc "All the available modules (including the current one)."}
   (Meta (List [Text Module]))
   (function (_ lux)
     (|> lux
@@ -466,7 +439,6 @@
         #try.Success)))
 
 (def: .public (tags_of type_name)
-  {#.doc "All the tags associated with a type definition."}
   (-> Name (Meta (Maybe (List Name))))
   (do ..monad
     [.let [[module name] type_name]
@@ -479,13 +451,11 @@
       (in #.None))))
 
 (def: .public location
-  {#.doc "The location of the current expression being analyzed."}
   (Meta Location)
   (function (_ lux)
     (#try.Success [lux (value@ #.location lux)])))
 
 (def: .public expected_type
-  {#.doc "The expected type of the current expression being analyzed."}
   (Meta Type)
   (function (_ lux)
     (case (value@ #.expected lux)
@@ -496,7 +466,6 @@
       (#try.Failure "Not expecting any type."))))
 
 (def: .public (imported_modules module_name)
-  {#.doc "All the modules imported by a specified module."}
   (-> Text (Meta (List Text)))
   (do ..monad
     [(^slots [#.imports]) (..module module_name)]
@@ -509,14 +478,12 @@
     (in (list.any? (text\= import) imports))))
 
 (def: .public (imported? import)
-  {#.doc (example "Checks if the given module has been imported by the current module.")}
   (-> Text (Meta Bit))
   (\ ..functor map
      (|>> (value@ #.imports) (list.any? (text\= import)))
      ..current_module))
 
 (def: .public (tag tag_name)
-  {#.doc "Given a tag, finds out what is its index, its related tag-list and its associated type."}
   (-> Name (Meta [Nat (List Name) Type]))
   (do ..monad
     [.let [[module name] tag_name]
@@ -528,19 +495,18 @@
       (if (or (text\= this_module_name module)
               (and imported! exported?))
         (in [idx tag_list type])
-        (..failure ($_ text\compose "Cannot access tag: " (name\encode tag_name) " from module " this_module_name)))
+        (..failure ($_ text\compose "Cannot access tag: " (name\encoded tag_name) " from module " this_module_name)))
 
       _
       (..failure ($_ text\compose
-                     "Unknown tag: " (name\encode tag_name) text.new_line
+                     "Unknown tag: " (name\encoded tag_name) text.new_line
                      " Known tags: " (|> =module
                                          (value@ #.tags)
-                                         (list\map (|>> product.left [module] name\encode (text.prefix text.new_line)))
+                                         (list\map (|>> product.left [module] name\encoded (text.prefix text.new_line)))
                                          text.together)
                      )))))
 
 (def: .public (tag_lists module)
-  {#.doc "All the tag-lists defined in a module, with their associated types."}
   (-> Text (Meta (List [(List Name) Type])))
   (do ..monad
     [=module (..module module)
@@ -553,7 +519,6 @@
                         [tag_list type]))))))
 
 (def: .public locals
-  {#.doc "All the local variables currently in scope, separated in different scopes."}
   (Meta (List (List [Text Type])))
   (function (_ lux)
     (case (list.inits (value@ #.scopes lux))
@@ -568,7 +533,6 @@
                                scopes)]))))
 
 (def: .public (de_aliased def_name)
-  {#.doc "Given an aliased definition's name, returns the original definition being referenced."}
   (-> Name (Meta Name))
   (do ..monad
     [constant (..definition def_name)]
@@ -580,13 +544,11 @@
           def_name))))
 
 (def: .public compiler_state
-  {#.doc "Obtains the current state of the compiler."}
   (Meta Lux)
   (function (_ lux)
     (#try.Success [lux lux])))
 
 (def: .public type_context
-  {#.doc (example "The current type-checking context.")}
   (Meta Type_Context)
   (function (_ lux)
     (#try.Success [lux (value@ #.type_context lux)])))
diff --git a/stdlib/source/library/lux/meta/annotation.lux b/stdlib/source/library/lux/meta/annotation.lux
index 42d151df3..c73cc9247 100644
--- a/stdlib/source/library/lux/meta/annotation.lux
+++ b/stdlib/source/library/lux/meta/annotation.lux
@@ -1,5 +1,4 @@
 (.module:
-  {#.doc (.example "Machinary for querying annotations on modules and definitions.")}
   [library
    [lux (#- nat int rev)
     [abstract
diff --git a/stdlib/source/library/lux/meta/location.lux b/stdlib/source/library/lux/meta/location.lux
index 24511eb26..f8d3a9023 100644
--- a/stdlib/source/library/lux/meta/location.lux
+++ b/stdlib/source/library/lux/meta/location.lux
@@ -19,8 +19,6 @@
    #.column 0})
 
 (macro: .public (here tokens compiler)
-  {#.doc (example "The Location of the current form."
-                  (here))}
   (case tokens
     #.End
     (let [location (value@ #.location compiler)]
@@ -33,15 +31,15 @@
     _
     (#.Left (`` (("lux in-module" (~~ (static .prelude_module)) wrong_syntax_error) (name_of ..here))))))
 
-(def: .public (format value)
+(def: .public (format it)
   (-> Location Text)
   (let [separator ","
-        [file line column] value]
+        [file line column] it]
     ($_ "lux text concat"
         "@"
-        (`` (("lux in-module" (~~ (static .prelude_module)) .text\encode) file)) separator
-        (`` (("lux in-module" (~~ (static .prelude_module)) .nat\encode) line)) separator
-        (`` (("lux in-module" (~~ (static .prelude_module)) .nat\encode) column)))))
+        (`` (("lux in-module" (~~ (static .prelude_module)) .text\encoded) file)) separator
+        (`` (("lux in-module" (~~ (static .prelude_module)) .nat\encoded) line)) separator
+        (`` (("lux in-module" (~~ (static .prelude_module)) .nat\encoded) column)))))
 
 (def: \n
   ("lux i64 char" +10))
diff --git a/stdlib/source/library/lux/target.lux b/stdlib/source/library/lux/target.lux
index 0821593ea..fca7b2f6c 100644
--- a/stdlib/source/library/lux/target.lux
+++ b/stdlib/source/library/lux/target.lux
@@ -3,8 +3,6 @@
    [lux #*]])
 
 (type: .public Target
-  {#.doc (example "The name/ID of a platform targetted by a Lux compiler."
-                  "This information can be used to generate code targetting specific platforms, and to make programs cross-platform.")}
   Text)
 
 (template [<name> <value>]
diff --git a/stdlib/source/library/lux/target/common_lisp.lux b/stdlib/source/library/lux/target/common_lisp.lux
index a53fac36f..3019924da 100644
--- a/stdlib/source/library/lux/target/common_lisp.lux
+++ b/stdlib/source/library/lux/target/common_lisp.lux
@@ -7,7 +7,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." monad fold monoid)]]]
+      ["." list ("#\." monad monoid)]]]
     [macro
      ["." template]]
     [math
diff --git a/stdlib/source/library/lux/target/js.lux b/stdlib/source/library/lux/target/js.lux
index 191b5520a..b2af12ac2 100644
--- a/stdlib/source/library/lux/target/js.lux
+++ b/stdlib/source/library/lux/target/js.lux
@@ -7,7 +7,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      ["." template]]
     [math
@@ -427,10 +427,10 @@
 
 (def: .public (cond clauses else!)
   (-> (List [Expression Statement]) Statement Statement)
-  (list\fold (.function (_ [test then!] next!)
-               (..if test then! next!))
-             else!
-             (list.reversed clauses)))
+  (list\mix (.function (_ [test then!] next!)
+              (..if test then! next!))
+            else!
+            (list.reversed clauses)))
 
 (template [<apply> <arg>+ <type>+ <function>+]
   [(`` (def: .public (<apply> function)
diff --git a/stdlib/source/library/lux/target/jvm/attribute/code.lux b/stdlib/source/library/lux/target/jvm/attribute/code.lux
index 81f487d2d..265c951a2 100644
--- a/stdlib/source/library/lux/target/jvm/attribute/code.lux
+++ b/stdlib/source/library/lux/target/jvm/attribute/code.lux
@@ -9,7 +9,7 @@
      [format
       [".F" binary (#+ Writer) ("#\." monoid)]]
      [collection
-      ["." row (#+ Row) ("#\." functor fold)]]]
+      ["." row (#+ Row) ("#\." functor mix)]]]
     [math
      [number
       ["n" nat]]]]]
@@ -51,7 +51,7 @@
       (|> code
           (value@ #attributes)
           (row\map length)
-          (row\fold n.+ 0))))
+          (row\mix n.+ 0))))
 
 (def: .public (equivalence attribute_equivalence)
   (All [attribute]
diff --git a/stdlib/source/library/lux/target/jvm/bytecode.lux b/stdlib/source/library/lux/target/jvm/bytecode.lux
index a97f4a1c2..9b16b5be6 100644
--- a/stdlib/source/library/lux/target/jvm/bytecode.lux
+++ b/stdlib/source/library/lux/target/jvm/bytecode.lux
@@ -17,7 +17,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]
       ["." row (#+ Row)]]]
     [macro
@@ -847,7 +847,7 @@
         (in (let [@from (value@ #program_counter tracker)]
               [[pool
                 environment'
-                (|> (list\fold (..acknowledge_label actual) tracker (list& default at_minimum afterwards))
+                (|> (list\mix (..acknowledge_label actual) tracker (list& default at_minimum afterwards))
                     (with@ #program_counter program_counter'))]
                [(function (_ resolver)
                   (let [get (: (-> Label (Maybe [Stack (Maybe Address)]))
@@ -890,7 +890,7 @@
         (in (let [@from (value@ #program_counter tracker)]
               [[pool
                 environment'
-                (|> (list\fold (..acknowledge_label actual) tracker (list& default (list\map product.right cases)))
+                (|> (list\mix (..acknowledge_label actual) tracker (list& default (list\map product.right cases)))
                     (with@ #program_counter program_counter'))]
                [(function (_ resolver)
                   (let [get (: (-> Label (Maybe [Stack (Maybe Address)]))
@@ -975,7 +975,7 @@
                      #//constant/pool.descriptor (type.descriptor type)})
           .let [consumption (|> inputs
                                 (list\map ..type_size)
-                                (list\fold n.+ (if <static?> 0 1))
+                                (list\mix n.+ (if <static?> 0 1))
                                 //unsigned.u1
                                 try.trusted)
                 production (|> output ..type_size //unsigned.u1 try.trusted)]]
diff --git a/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux b/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux
index 43cb70e87..b1d51e164 100644
--- a/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux
+++ b/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux
@@ -9,7 +9,7 @@
      [format
       [binary (#+ Writer)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["n" nat]]]
@@ -45,7 +45,7 @@
                               (same? /////type.double input))
                         ..wide
                         ..normal)))
-          (list\fold n.+ 0))))
+          (list\mix n.+ 0))))
 
   (template [<start> <name>]
     [(def: .public <name>
diff --git a/stdlib/source/library/lux/target/jvm/class.lux b/stdlib/source/library/lux/target/jvm/class.lux
index 586cc2394..0b792934b 100644
--- a/stdlib/source/library/lux/target/jvm/class.lux
+++ b/stdlib/source/library/lux/target/jvm/class.lux
@@ -73,12 +73,12 @@
     [@this (//constant/pool.class this)
      @super (//constant/pool.class super)
      @interfaces (: (Resource (Row (Index //constant.Class)))
-                    (monad.fold ! (function (_ interface @interfaces)
-                                    (do !
-                                      [@interface (//constant/pool.class interface)]
-                                      (in (row.suffix @interface @interfaces))))
-                                row.empty
-                                interfaces))]
+                    (monad.mix ! (function (_ interface @interfaces)
+                                   (do !
+                                     [@interface (//constant/pool.class interface)]
+                                     (in (row.suffix @interface @interfaces))))
+                               row.empty
+                               interfaces))]
     (in [@this @super @interfaces])))
 
 (def: .public (class version modifier
diff --git a/stdlib/source/library/lux/target/jvm/constant/pool.lux b/stdlib/source/library/lux/target/jvm/constant/pool.lux
index 346dd0f9e..99597756d 100644
--- a/stdlib/source/library/lux/target/jvm/constant/pool.lux
+++ b/stdlib/source/library/lux/target/jvm/constant/pool.lux
@@ -14,7 +14,7 @@
      ["." format #_
       ["#" binary (#+ Writer) ("specification\." monoid)]]
      [collection
-      ["." row (#+ Row) ("#\." fold)]]]
+      ["." row (#+ Row) ("#\." mix)]]]
     [macro
      ["." template]]
     [math
@@ -147,10 +147,10 @@
 (def: .public writer
   (Writer Pool)
   (function (_ [next pool])
-    (row\fold (function (_ [_index post] pre)
-                (specification\compose pre (//.writer post)))
-              (format.bits/16 (!index next))
-              pool)))
+    (row\mix (function (_ [_index post] pre)
+               (specification\compose pre (//.writer post)))
+             (format.bits/16 (!index next))
+             pool)))
 
 (def: .public empty
   Pool
diff --git a/stdlib/source/library/lux/target/jvm/reflection.lux b/stdlib/source/library/lux/target/jvm/reflection.lux
index db554e4fb..f23e3c019 100644
--- a/stdlib/source/library/lux/target/jvm/reflection.lux
+++ b/stdlib/source/library/lux/target/jvm/reflection.lux
@@ -14,7 +14,7 @@
      ["." text ("#\." equivalence)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold functor)]
+      ["." list ("#\." mix functor)]
       ["." array]
       ["." dictionary]]]
     [math
@@ -305,9 +305,9 @@
           (|> params
               (list.zipped/2 (list\map (|>> java/lang/reflect/TypeVariable::getName)
                                        class_params))
-              (list\fold (function (_ [name paramT] mapping)
-                           (dictionary.has name paramT mapping))
-                         /lux.fresh)
+              (list\mix (function (_ [name paramT] mapping)
+                          (dictionary.has name paramT mapping))
+                        /lux.fresh)
               #try.Success)
           (exception.except ..type_parameter_mismatch [num_class_params num_type_params class type]))
         (exception.except ..cannot_correspond [class type])))
diff --git a/stdlib/source/library/lux/target/lua.lux b/stdlib/source/library/lux/target/lua.lux
index b70cf80f0..8bac227eb 100644
--- a/stdlib/source/library/lux/target/lua.lux
+++ b/stdlib/source/library/lux/target/lua.lux
@@ -14,7 +14,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." template]
@@ -96,7 +96,7 @@
     (-> Int Literal)
     ... Integers must be turned into hexadecimal to avoid quirks in how Lua parses integers.
     ... In particular, the number -9223372036854775808 will be incorrectly parsed as a float by Lua.
-    (.let [to_hex (\ n.hex encode)]
+    (.let [to_hex (\ n.hex encoded)]
       (|>> .nat
            to_hex
            (format "0x")
@@ -366,10 +366,10 @@
 
 (def: .public (cond clauses else!)
   (-> (List [Expression Statement]) Statement Statement)
-  (list\fold (.function (_ [test then!] next!)
-               (..if test then! next!))
-             else!
-             (list.reversed clauses)))
+  (list\mix (.function (_ [test then!] next!)
+              (..if test then! next!))
+            else!
+            (list.reversed clauses)))
 
 (syntax: (arity_inputs [arity <code>.nat])
   (in (case arity
diff --git a/stdlib/source/library/lux/target/php.lux b/stdlib/source/library/lux/target/php.lux
index 860c33713..4d9817ae4 100644
--- a/stdlib/source/library/lux/target/php.lux
+++ b/stdlib/source/library/lux/target/php.lux
@@ -14,7 +14,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." template]
@@ -136,7 +136,7 @@
 
   (def: .public int
     (-> Int Literal)
-    (.let [to_hex (\ n.hex encode)]
+    (.let [to_hex (\ n.hex encoded)]
       (|>> .nat
            to_hex
            (format "0x")
@@ -537,10 +537,10 @@
 
 (def: .public (cond clauses else!)
   (-> (List [Expression Statement]) Statement Statement)
-  (list\fold (function (_ [test then!] next!)
-               (..if test then! next!))
-             else!
-             (list.reversed clauses)))
+  (list\mix (function (_ [test then!] next!)
+              (..if test then! next!))
+            else!
+            (list.reversed clauses)))
 
 (def: .public command_line_arguments
   Var
diff --git a/stdlib/source/library/lux/target/python.lux b/stdlib/source/library/lux/target/python.lux
index 06ad85593..47fbc7fdc 100644
--- a/stdlib/source/library/lux/target/python.lux
+++ b/stdlib/source/library/lux/target/python.lux
@@ -15,7 +15,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." template]
@@ -452,10 +452,10 @@
 
 (def: .public (cond clauses else!)
   (-> (List [(Expression Any) (Statement Any)]) (Statement Any) (Statement Any))
-  (list\fold (.function (_ [test then!] next!)
-               (..if test then! next!))
-             else!
-             (list.reversed clauses)))
+  (list\mix (.function (_ [test then!] next!)
+              (..if test then! next!))
+            else!
+            (list.reversed clauses)))
 
 (syntax: (arity_inputs [arity <code>.nat])
   (in (case arity
diff --git a/stdlib/source/library/lux/target/r.lux b/stdlib/source/library/lux/target/r.lux
index d5344a1c9..2b4fcede3 100644
--- a/stdlib/source/library/lux/target/r.lux
+++ b/stdlib/source/library/lux/target/r.lux
@@ -11,7 +11,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." template]
@@ -264,10 +264,10 @@
 
   (def: .public (cond clauses else)
     (-> (List [Expression Expression]) Expression Expression)
-    (list\fold (.function (_ [test then] next)
-                 (if test then next))
-               else
-               (list.reversed clauses)))
+    (list\mix (.function (_ [test then] next)
+                (if test then next))
+              else
+              (list.reversed clauses)))
 
   (template [<name> <op>]
     [(def: .public (<name> param subject)
diff --git a/stdlib/source/library/lux/target/ruby.lux b/stdlib/source/library/lux/target/ruby.lux
index 954a91d97..a63a15d09 100644
--- a/stdlib/source/library/lux/target/ruby.lux
+++ b/stdlib/source/library/lux/target/ruby.lux
@@ -14,7 +14,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      [syntax (#+ syntax:)]
      ["." template]
@@ -428,10 +428,10 @@
 
 (def: .public (cond clauses else!)
   (-> (List [Expression Statement]) Statement Statement)
-  (list\fold (.function (_ [test then!] next!)
-               (..if test then! next!))
-             else!
-             (list.reversed clauses)))
+  (list\mix (.function (_ [test then!] next!)
+              (..if test then! next!))
+            else!
+            (list.reversed clauses)))
 
 (syntax: (arity_inputs [arity <code>.nat])
   (in (case arity
diff --git a/stdlib/source/library/lux/target/scheme.lux b/stdlib/source/library/lux/target/scheme.lux
index 4390d9981..c91478519 100644
--- a/stdlib/source/library/lux/target/scheme.lux
+++ b/stdlib/source/library/lux/target/scheme.lux
@@ -11,7 +11,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold monoid)]]]
+      ["." list ("#\." functor monoid)]]]
     [macro
      ["." template]]
     [math
diff --git a/stdlib/source/library/lux/test.lux b/stdlib/source/library/lux/test.lux
index e92cd49e4..8df92c80a 100644
--- a/stdlib/source/library/lux/test.lux
+++ b/stdlib/source/library/lux/test.lux
@@ -23,7 +23,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set (#+ Set)]
       ["." dictionary #_
        ["#" ordered (#+ Dictionary)]]]]
@@ -312,11 +312,11 @@
 
 (def: encoded_coverage
   (-> (List Text) Text)
-  (list\fold (function (_ short aggregate)
-               (case aggregate
-                 "" short
-                 _ (format aggregate ..coverage_separator short)))
-             ""))
+  (list\mix (function (_ short aggregate)
+              (case aggregate
+                "" short
+                _ (format aggregate ..coverage_separator short)))
+            ""))
 
 (def: (coverage module encoding)
   (-> Text Text (Set Name))
@@ -383,11 +383,11 @@
     [.let [module (name.module module)]
      definitions (meta.definitions module)
      .let [coverage (|> definitions
-                        (list\fold (function (_ [short [exported? _]] aggregate)
-                                     (if exported?
-                                       (#.Item short aggregate)
-                                       aggregate))
-                                   #.End)
+                        (list\mix (function (_ [short [exported? _]] aggregate)
+                                    (if exported?
+                                      (#.Item short aggregate)
+                                      aggregate))
+                                  #.End)
                         ..encoded_coverage)]]
     (in (list (` ((~! ..covering')
                   (~ (code.text module))
@@ -438,7 +438,7 @@
                                                                              (list\map product.right))]
                                                           (write! [(|> assertions
                                                                        (list\map product.left)
-                                                                       (list\fold ..total ..start))
+                                                                       (list\mix ..total ..start))
                                                                    (|> assertions
                                                                        (list\map product.right)
                                                                        (text.interposed ..separator))]))
diff --git a/stdlib/source/library/lux/time.lux b/stdlib/source/library/lux/time.lux
index c6206e167..051012a8d 100644
--- a/stdlib/source/library/lux/time.lux
+++ b/stdlib/source/library/lux/time.lux
@@ -45,8 +45,8 @@
 
 (exception: .public (time_exceeds_a_day {time Nat})
   (exception.report
-   ["Time (in milli-seconds)" (n\encode time)]
-   ["Maximum (in milli-seconds)" (n\encode (-- limit))]))
+   ["Time (in milli-seconds)" (n\encoded time)]
+   ["Maximum (in milli-seconds)" (n\encoded (-- limit))]))
 
 (def: separator ":")
 
@@ -64,9 +64,9 @@
 (template [<maximum> <parser> <exception> <sub_parser>]
   [(exception: .public (<exception> {value Nat})
      (exception.report
-      ["Value" (n\encode value)]
-      ["Minimum" (n\encode 0)]
-      ["Maximum" (n\encode (-- <maximum>))]))
+      ["Value" (n\encoded value)]
+      ["Minimum" (n\encoded 0)]
+      ["Maximum" (n\encoded (-- <maximum>))]))
 
    (def: <parser>
      (Parser Nat)
@@ -156,8 +156,8 @@
 (def: (padded value)
   (-> Nat Text)
   (if (n.< 10 value)
-    (text\compose "0" (n\encode value))
-    (n\encode value)))
+    (text\compose "0" (n\encoded value))
+    (n\encoded value)))
 
 (def: (positive space duration)
   (-> Duration Duration Duration)
@@ -168,10 +168,10 @@
 (def: (millis_format millis)
   (-> Nat Text)
   (cond (n.= 0 millis)   ""
-        (n.< 10 millis)  ($_ text\compose ".00" (n\encode millis))
-        (n.< 100 millis) ($_ text\compose ".0" (n\encode millis))
+        (n.< 10 millis)  ($_ text\compose ".00" (n\encoded millis))
+        (n.< 100 millis) ($_ text\compose ".0" (n\encoded millis))
         ... (n.< 1,000 millis)
-        ($_ text\compose "." (n\encode millis))))
+        ($_ text\compose "." (n\encoded millis))))
 
 (type: .public Clock
   {#.doc (example "A clock marking the specific hour, minute, second, and milli-second in a day.")}
@@ -219,5 +219,5 @@
                   "For example: 21:14:51.827")}
   (Codec Text Time)
 
-  (def: encode ..format)
-  (def: decode (<text>.result ..parser)))
+  (def: encoded ..format)
+  (def: decoded (<text>.result ..parser)))
diff --git a/stdlib/source/library/lux/time/date.lux b/stdlib/source/library/lux/time/date.lux
index d06910711..dd2cae8de 100644
--- a/stdlib/source/library/lux/time/date.lux
+++ b/stdlib/source/library/lux/time/date.lux
@@ -16,7 +16,7 @@
     [data
      ["." text ("#\." monoid)]
      [collection
-      ["." list ("#\." fold)]
+      ["." list ("#\." mix)]
       ["." dictionary (#+ Dictionary)]]]
     [math
      [number
@@ -30,10 +30,10 @@
 
 (def: month_by_number
   (Dictionary Nat Month)
-  (list\fold (function (_ month mapping)
-               (dictionary.has (//month.number month) month mapping))
-             (dictionary.empty n.hash)
-             //month.year))
+  (list\mix (function (_ month mapping)
+              (dictionary.has (//month.number month) month mapping))
+            (dictionary.empty n.hash)
+            //month.year))
 
 (def: minimum_day
   1)
@@ -51,15 +51,15 @@
 
 (exception: .public (invalid_day {year Year} {month Month} {day Nat})
   (exception.report
-   ["Value" (n\encode day)]
-   ["Minimum" (n\encode ..minimum_day)]
-   ["Maximum" (n\encode (..month_days year month))]
-   ["Year" (\ //year.codec encode year)]
-   ["Month" (n\encode (//month.number month))]))
+   ["Value" (n\encoded day)]
+   ["Minimum" (n\encoded ..minimum_day)]
+   ["Maximum" (n\encoded (..month_days year month))]
+   ["Year" (\ //year.codec encoded year)]
+   ["Month" (n\encoded (//month.number month))]))
 
 (def: (padded value)
   (-> Nat Text)
-  (let [digits (n\encode value)]
+  (let [digits (n\encoded value)]
     (if (n.< 10 value)
       (text\compose "0" digits)
       digits)))
@@ -155,9 +155,9 @@
 (template [<minimum> <maximum> <parser> <exception>]
   [(exception: .public (<exception> {value Nat})
      (exception.report
-      ["Value" (n\encode value)]
-      ["Minimum" (n\encode <minimum>)]
-      ["Maximum" (n\encode <maximum>)]))
+      ["Value" (n\encoded value)]
+      ["Minimum" (n\encoded <minimum>)]
+      ["Maximum" (n\encoded <maximum>)]))
 
    (def: <parser>
      (Parser Nat)
@@ -185,7 +185,7 @@
 (def: (format value)
   (-> Date Text)
   ($_ text\compose
-      (\ //year.codec encode (..year value))
+      (\ //year.codec encoded (..year value))
       ..separator (..padded (|> value ..month //month.number))
       ..separator (..padded (..day_of_month value))))
 
@@ -194,8 +194,8 @@
                   "For example: 2017-01-15")}
   (Codec Text Date)
   
-  (def: encode ..format)
-  (def: decode (<text>.result ..parser)))
+  (def: encoded ..format)
+  (def: decoded (<text>.result ..parser)))
 
 (def: days_per_leap
   (|> //year.days
diff --git a/stdlib/source/library/lux/time/day.lux b/stdlib/source/library/lux/time/day.lux
index b44ace3a8..e091d2d5b 100644
--- a/stdlib/source/library/lux/time/day.lux
+++ b/stdlib/source/library/lux/time/day.lux
@@ -98,7 +98,7 @@
 (implementation: .public codec
   (Codec Text Day)
   
-  (def: (encode value)
+  (def: (encoded value)
     (case value
       (^template [<tag>]
         [<tag> (template.text [<tag>])])
@@ -109,7 +109,7 @@
        [#..Friday]
        [#..Saturday]
        [#..Sunday])))
-  (def: (decode value)
+  (def: (decoded value)
     (case value
       (^template [<tag>]
         [(^ (template.text [<tag>])) (#try.Success <tag>)])
@@ -149,11 +149,11 @@
 
   (exception: .public (invalid_day {number Nat})
     (exception.report
-     ["Number" (\ n.decimal encode number)]
+     ["Number" (\ n.decimal encoded number)]
      ["Valid range" ($_ "lux text concat"
-                        (\ n.decimal encode (..number #Sunday))
+                        (\ n.decimal encoded (..number #Sunday))
                         " ~ "
-                        (\ n.decimal encode (..number #Saturday)))]))
+                        (\ n.decimal encoded (..number #Saturday)))]))
 
   (def: .public (by_number number)
     (-> Nat (Try Day))
diff --git a/stdlib/source/library/lux/time/duration.lux b/stdlib/source/library/lux/time/duration.lux
index 995d0c678..f36e0dff1 100644
--- a/stdlib/source/library/lux/time/duration.lux
+++ b/stdlib/source/library/lux/time/duration.lux
@@ -127,11 +127,11 @@
   ["-" negative_sign]
   )
 
-(def: (encode duration)
+(def: (encoded duration)
   (if (\ ..equivalence = ..empty duration)
     ($_ text\compose
         ..positive_sign
-        (nat\encode 0)
+        (nat\encoded 0)
         ..milli_second_suffix)
     (let [signed? (negative? duration)
           [days time_left] [(ticks day duration) (framed day duration)]
@@ -147,11 +147,11 @@
           millis (..millis time_left)]
       ($_ text\compose
           (if signed? ..negative_sign ..positive_sign)
-          (if (i.= +0 days) "" (text\compose (nat\encode (.nat days)) ..day_suffix))
-          (if (i.= +0 hours) "" (text\compose (nat\encode (.nat hours)) ..hour_suffix))
-          (if (i.= +0 minutes) "" (text\compose (nat\encode (.nat minutes)) ..minute_suffix))
-          (if (i.= +0 seconds) "" (text\compose (nat\encode (.nat seconds)) ..second_suffix))
-          (if (i.= +0 millis) "" (text\compose (nat\encode (.nat millis)) ..milli_second_suffix))
+          (if (i.= +0 days) "" (text\compose (nat\encoded (.nat days)) ..day_suffix))
+          (if (i.= +0 hours) "" (text\compose (nat\encoded (.nat hours)) ..hour_suffix))
+          (if (i.= +0 minutes) "" (text\compose (nat\encoded (.nat minutes)) ..minute_suffix))
+          (if (i.= +0 seconds) "" (text\compose (nat\encoded (.nat seconds)) ..second_suffix))
+          (if (i.= +0 millis) "" (text\compose (nat\encoded (.nat millis)) ..milli_second_suffix))
           ))))
 
 (def: parser
@@ -186,8 +186,8 @@
 (implementation: .public codec
   (Codec Text Duration)
 
-  (def: encode ..encode)
-  (def: decode (<text>.result ..parser)))
+  (def: encoded ..encoded)
+  (def: decoded (<text>.result ..parser)))
 
 (def: .public (difference from to)
   (-> Duration Duration Duration)
diff --git a/stdlib/source/library/lux/time/instant.lux b/stdlib/source/library/lux/time/instant.lux
index f454c1425..5b7b0e493 100644
--- a/stdlib/source/library/lux/time/instant.lux
+++ b/stdlib/source/library/lux/time/instant.lux
@@ -129,8 +129,8 @@
   (let [[date time] (..date_time instant)
         time (..clock_time time)]
     ($_ text\compose
-        (\ date.codec encode date) ..date_suffix
-        (\ //.codec encode time) ..time_suffix)))
+        (\ date.codec encoded date) ..date_suffix
+        (\ //.codec encoded time) ..time_suffix)))
 
 (def: parser
   (Parser Instant)
@@ -152,8 +152,8 @@
                   "For example: 2017-01-15T21:14:51.827Z")}
   (Codec Text Instant)
   
-  (def: encode ..format)
-  (def: decode (<text>.result ..parser)))
+  (def: encoded ..format)
+  (def: decoded (<text>.result ..parser)))
 
 (def: .public now
   {#.doc (example "Yields the current instant, as measured from the operating-system's clock.")}
diff --git a/stdlib/source/library/lux/time/month.lux b/stdlib/source/library/lux/time/month.lux
index 07fcc6269..216365ac8 100644
--- a/stdlib/source/library/lux/time/month.lux
+++ b/stdlib/source/library/lux/time/month.lux
@@ -78,11 +78,11 @@
 
   (exception: .public (invalid_month {number Nat})
     (exception.report
-     ["Number" (\ n.decimal encode number)]
+     ["Number" (\ n.decimal encoded number)]
      ["Valid range" ($_ "lux text concat"
-                        (\ n.decimal encode (..number #January))
+                        (\ n.decimal encoded (..number #January))
                         " ~ "
-                        (\ n.decimal encode (..number #December)))]))
+                        (\ n.decimal encoded (..number #December)))]))
 
   (def: .public (by_number number)
     (-> Nat (Try Month))
@@ -210,7 +210,7 @@
 (implementation: .public codec
   (Codec Text Month)
 
-  (def: (encode value)
+  (def: (encoded value)
     (case value
       (^template [<tag>]
         [<tag> (template.text [<tag>])])
@@ -226,7 +226,7 @@
        [#..October]
        [#..November]
        [#..December])))
-  (def: (decode value)
+  (def: (decoded value)
     (case value
       (^template [<tag>]
         [(^ (template.text [<tag>])) (#try.Success <tag>)])
diff --git a/stdlib/source/library/lux/time/year.lux b/stdlib/source/library/lux/time/year.lux
index 3eb12ad90..4347aff81 100644
--- a/stdlib/source/library/lux/time/year.lux
+++ b/stdlib/source/library/lux/time/year.lux
@@ -112,12 +112,12 @@
                   ))
             (..with_year_0_leap year)))))
 
-(def: (encode year)
+(def: (encoded year)
   (-> Year Text)
   (let [year (..value year)]
     (if (i.< +0 year)
-      (i\encode year)
-      (n\encode (.nat year)))))
+      (i\encoded year)
+      (n\encoded (.nat year)))))
 
 (def: .public parser
   (Parser Year)
@@ -134,8 +134,8 @@
                   "For example: 2017")}
   (Codec Text Year)
   
-  (def: encode ..encode)
-  (def: decode (<text>.result ..parser)))
+  (def: encoded ..encoded)
+  (def: decoded (<text>.result ..parser)))
 
 (implementation: .public equivalence
   (Equivalence Year)
diff --git a/stdlib/source/library/lux/tool/compiler/default/platform.lux b/stdlib/source/library/lux/tool/compiler/default/platform.lux
index b5eed68f8..1894359a9 100644
--- a/stdlib/source/library/lux/tool/compiler/default/platform.lux
+++ b/stdlib/source/library/lux/tool/compiler/default/platform.lux
@@ -22,9 +22,9 @@
       ["%" format (#+ format)]]
      [collection
       ["." dictionary (#+ Dictionary)]
-      ["." row (#+ Row) ("#\." fold)]
+      ["." row (#+ Row) ("#\." mix)]
       ["." set (#+ Set)]
-      ["." list ("#\." monoid functor fold)]]
+      ["." list ("#\." monoid functor mix)]]
      [format
       ["_" binary (#+ Writer)]]]
     [world
@@ -280,9 +280,9 @@
                     #///directive.state
                     #extension.state
                     #///generation.log])
-           (row\fold (function (_ right left)
-                       (format left ..compilation_log_separator right))
-                     module)))
+           (row\mix (function (_ right left)
+                      (format left ..compilation_log_separator right))
+                    module)))
 
     (def: with_reset_log
       (All [<type_vars>]
@@ -329,10 +329,10 @@
                                            (|> mapping
                                                (dictionary.revised' source ..empty (set.has target))
                                                (dictionary.revised source (set.union forward)))]
-                                       (list\fold (function (_ previous)
-                                                    (dictionary.revised' previous ..empty (set.has target)))
-                                                  with_dependence+transitives
-                                                  (set.list backward))))))]
+                                       (list\mix (function (_ previous)
+                                                   (dictionary.revised' previous ..empty (set.has target)))
+                                                 with_dependence+transitives
+                                                 (set.list backward))))))]
         (|> dependence
             (revised@ #depends_on
                       (update_dependence
@@ -561,17 +561,17 @@
                                        ... This currently assumes that all imports will be specified once in a single .module: form.
                                        ... This might not be the case in the future.
                                        [all_dependencies duplicates _] (: [(Set Module) (Set Module) Bit]
-                                                                          (list\fold (function (_ new [all duplicates seen_prelude?])
-                                                                                       (if (set.member? all new)
-                                                                                         (if (text\= .prelude_module new)
-                                                                                           (if seen_prelude?
-                                                                                             [all (set.has new duplicates) seen_prelude?]
-                                                                                             [all duplicates true])
-                                                                                           [all (set.has new duplicates) seen_prelude?])
-                                                                                         [(set.has new all) duplicates seen_prelude?]))
-                                                                                     (: [(Set Module) (Set Module) Bit]
-                                                                                        [all_dependencies ..empty (set.empty? all_dependencies)])
-                                                                                     new_dependencies))]
+                                                                          (list\mix (function (_ new [all duplicates seen_prelude?])
+                                                                                      (if (set.member? all new)
+                                                                                        (if (text\= .prelude_module new)
+                                                                                          (if seen_prelude?
+                                                                                            [all (set.has new duplicates) seen_prelude?]
+                                                                                            [all duplicates true])
+                                                                                          [all (set.has new duplicates) seen_prelude?])
+                                                                                        [(set.has new all) duplicates seen_prelude?]))
+                                                                                    (: [(Set Module) (Set Module) Bit]
+                                                                                       [all_dependencies ..empty (set.empty? all_dependencies)])
+                                                                                    new_dependencies))]
                                  [archive state] (if (set.empty? duplicates)
                                                    (case new_dependencies
                                                      #.End
@@ -584,7 +584,7 @@
                                                                               (monad.all ..monad))
                                                         .let [archive (|> archive,document+
                                                                           (list\map product.left)
-                                                                          (list\fold archive.merged archive))]]
+                                                                          (list\mix archive.merged archive))]]
                                                        (in [archive (try.trusted
                                                                      (..updated_state archive state))])))
                                                    (async\in (exception.except ..cannot_import_twice [module duplicates])))]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/analysis.lux b/stdlib/source/library/lux/tool/compiler/language/lux/analysis.lux
index 45216a70f..6d1f355ba 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/analysis.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/analysis.lux
@@ -16,7 +16,7 @@
      ["." text ("#\." equivalence)
       ["%" format (#+ Format format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["n" nat]
@@ -262,10 +262,10 @@
 
 (def: .public (apply [abstraction inputs])
   (-> (Application Analysis) Analysis)
-  (list\fold (function (_ input abstraction')
-               (#Apply input abstraction'))
-             abstraction
-             inputs))
+  (list\mix (function (_ input abstraction')
+              (#Apply input abstraction'))
+            abstraction
+            inputs))
 
 (def: .public (application analysis)
   (-> Analysis (Application Analysis))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case.lux
index fc7575260..6c31960e4 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case.lux
@@ -13,7 +13,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold monoid functor)]]]
+      ["." list ("#\." mix monoid functor)]]]
     [math
      [number
       ["n" nat]]]
@@ -216,19 +216,19 @@
                             _
                             (undefined)))]
             (do !
-              [[memberP+ thenA] (list\fold (: (All [a]
-                                                (-> [Type Code] (Operation [(List Pattern) a])
-                                                    (Operation [(List Pattern) a])))
-                                              (function (_ [memberT memberC] then)
-                                                (do !
-                                                  [[memberP [memberP+ thenA]] ((:as (All [a] (-> (Maybe Nat) Type Code (Operation a) (Operation [Pattern a])))
-                                                                                    analyse_pattern)
-                                                                               #.None memberT memberC then)]
-                                                  (in [(list& memberP memberP+) thenA]))))
-                                           (do !
-                                             [nextA next]
-                                             (in [(list) nextA]))
-                                           matches)]
+              [[memberP+ thenA] (list\mix (: (All [a]
+                                               (-> [Type Code] (Operation [(List Pattern) a])
+                                                   (Operation [(List Pattern) a])))
+                                             (function (_ [memberT memberC] then)
+                                               (do !
+                                                 [[memberP [memberP+ thenA]] ((:as (All [a] (-> (Maybe Nat) Type Code (Operation a) (Operation [Pattern a])))
+                                                                                   analyse_pattern)
+                                                                              #.None memberT memberC then)]
+                                                 (in [(list& memberP memberP+) thenA]))))
+                                          (do !
+                                            [nextA next]
+                                            (in [(list) nextA]))
+                                          matches)]
               (in [(/.pattern/tuple memberP+)
                    thenA])))
 
@@ -320,7 +320,7 @@
                           branchesT)
        outputHC (|> outputH product.left /coverage.determine)
        outputTC (monad.map ! (|>> product.left /coverage.determine) outputT)
-       _ (.case (monad.fold try.monad /coverage.merged outputHC outputTC)
+       _ (.case (monad.mix try.monad /coverage.merged outputHC outputTC)
            (#try.Success coverage)
            (///.assertion non_exhaustive_pattern_matching [inputC branches coverage]
                           (/coverage.exhaustive? coverage))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case/coverage.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case/coverage.lux
index e7efacf3c..753f6a13e 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case/coverage.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/case/coverage.lux
@@ -13,7 +13,7 @@
      ["." text
       ["%" format (#+ Format format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]]]
     [math
      [number
@@ -128,17 +128,17 @@
       (#.Item lastP prevsP+)
       (do ////.monad
         [lastC (determine lastP)]
-        (monad.fold ////.monad
-                    (function (_ leftP rightC)
-                      (do ////.monad
-                        [leftC (determine leftP)]
-                        (case rightC
-                          #Exhaustive
-                          (in leftC)
-
-                          _
-                          (in (#Seq leftC rightC)))))
-                    lastC prevsP+)))
+        (monad.mix ////.monad
+                   (function (_ leftP rightC)
+                     (do ////.monad
+                       [leftC (determine leftP)]
+                       (case rightC
+                         #Exhaustive
+                         (in leftC)
+
+                         _
+                         (in (#Seq leftC rightC)))))
+                   lastC prevsP+)))
 
     ... Variant patterns can be shown to be exhaustive if all the possible
     ... cases are handled exhaustively.
@@ -243,17 +243,17 @@
 
             ... else
             (do {! try.monad}
-              [casesM (monad.fold !
-                                  (function (_ [tagA coverageA] casesSF')
-                                    (case (dictionary.value tagA casesSF')
-                                      (#.Some coverageSF)
-                                      (do !
-                                        [coverageM (merged coverageA coverageSF)]
-                                        (in (dictionary.has tagA coverageM casesSF')))
-
-                                      #.None
-                                      (in (dictionary.has tagA coverageA casesSF'))))
-                                  casesSF (dictionary.entries casesA))]
+              [casesM (monad.mix !
+                                 (function (_ [tagA coverageA] casesSF')
+                                   (case (dictionary.value tagA casesSF')
+                                     (#.Some coverageSF)
+                                     (do !
+                                       [coverageM (merged coverageA coverageSF)]
+                                       (in (dictionary.has tagA coverageM casesSF')))
+
+                                     #.None
+                                     (in (dictionary.has tagA coverageA casesSF'))))
+                                 casesSF (dictionary.entries casesA))]
               (in (if (and (or (known_cases? addition_cases)
                                (known_cases? so_far_cases))
                            (n.= (++ (n.max addition_cases so_far_cases))
@@ -360,9 +360,9 @@
           #.None
           (case (list.reversed possibilitiesSF)
             (#.Item last prevs)
-            (in (list\fold (function (_ left right) (#Alt left right))
-                           last
-                           prevs))
+            (in (list\mix (function (_ left right) (#Alt left right))
+                          last
+                          prevs))
 
             #.End
             (undefined)))))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/function.lux
index 8aa2f284f..3589b7224 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/function.lux
@@ -10,7 +10,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold monoid monad)]]]
+      ["." list ("#\." monoid monad)]]]
     ["." type
      ["." check]]
     ["." meta]]]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/module.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/module.lux
index 14e08a4c0..abe4b8df6 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/module.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/module.lux
@@ -11,7 +11,7 @@
      ["." text ("#\." equivalence)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold functor)]
+      ["." list ("#\." mix functor)]
       [dictionary
        ["." plist]]]]
     ["." meta]]]
@@ -264,10 +264,10 @@
            (#try.Success [(revised@ #.modules
                                     (plist.revised self_name
                                                    (|>> (revised@ #.tags (function (_ tag_bindings)
-                                                                           (list\fold (function (_ [idx tag] table)
-                                                                                        (plist.has tag [idx namespaced_tags exported? type] table))
-                                                                                      tag_bindings
-                                                                                      (list.enumeration tags))))
+                                                                           (list\mix (function (_ [idx tag] table)
+                                                                                       (plist.has tag [idx namespaced_tags exported? type] table))
+                                                                                     tag_bindings
+                                                                                     (list.enumeration tags))))
                                                         (revised@ #.types (plist.has type_name [namespaced_tags exported? type]))))
                                     state)
                           []]))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/scope.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/scope.lux
index 44d3b7deb..b859c7528 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/scope.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/scope.lux
@@ -11,7 +11,7 @@
      ["." text ("#\." equivalence)]
      ["." product]
      [collection
-      ["." list ("#\." functor fold monoid)]
+      ["." list ("#\." functor mix monoid)]
       [dictionary
        ["." plist]]]]]]
   ["." /// #_
@@ -90,17 +90,17 @@
          (#.Item top_outer _)
          (let [[ref_type init_ref] (maybe.else (undefined)
                                                (..reference name top_outer))
-               [ref inner'] (list\fold (: (-> Scope [Variable (List Scope)] [Variable (List Scope)])
-                                          (function (_ scope ref+inner)
-                                            [(#variable.Foreign (value@ [#.captured #.counter] scope))
-                                             (#.Item (revised@ #.captured
-                                                               (: (-> Foreign Foreign)
-                                                                  (|>> (revised@ #.counter ++)
-                                                                       (revised@ #.mappings (plist.has name [ref_type (product.left ref+inner)]))))
-                                                               scope)
-                                                     (product.right ref+inner))]))
-                                       [init_ref #.End]
-                                       (list.reversed inner))
+               [ref inner'] (list\mix (: (-> Scope [Variable (List Scope)] [Variable (List Scope)])
+                                         (function (_ scope ref+inner)
+                                           [(#variable.Foreign (value@ [#.captured #.counter] scope))
+                                            (#.Item (revised@ #.captured
+                                                              (: (-> Foreign Foreign)
+                                                                 (|>> (revised@ #.counter ++)
+                                                                      (revised@ #.mappings (plist.has name [ref_type (product.left ref+inner)]))))
+                                                              scope)
+                                                    (product.right ref+inner))]))
+                                      [init_ref #.End]
+                                      (list.reversed inner))
                scopes (list\compose inner' outer)]
            (#.Right [(with@ #.scopes scopes state)
                      (#.Some [ref_type ref])]))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/structure.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/structure.lux
index 886ffe065..b23704981 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/structure.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/analysis/structure.lux
@@ -318,21 +318,21 @@
            (/.except ..record_size_mismatch [size_ts size_record recordT record]))
        .let [tuple_range (list.indices size_ts)
              tag->idx (dictionary.of_list name.hash (list.zipped/2 tag_set tuple_range))]
-       idx->val (monad.fold !
-                            (function (_ [key val] idx->val)
-                              (do !
-                                [key (///extension.lifted (meta.normal key))]
-                                (case (dictionary.value key tag->idx)
-                                  (#.Some idx)
-                                  (if (dictionary.key? idx->val idx)
-                                    (/.except ..cannot_repeat_tag [key record])
-                                    (in (dictionary.has idx val idx->val)))
-
-                                  #.None
-                                  (/.except ..tag_does_not_belong_to_record [key recordT]))))
-                            (: (Dictionary Nat Code)
-                               (dictionary.empty n.hash))
-                            record)
+       idx->val (monad.mix !
+                           (function (_ [key val] idx->val)
+                             (do !
+                               [key (///extension.lifted (meta.normal key))]
+                               (case (dictionary.value key tag->idx)
+                                 (#.Some idx)
+                                 (if (dictionary.key? idx->val idx)
+                                   (/.except ..cannot_repeat_tag [key record])
+                                   (in (dictionary.has idx val idx->val)))
+
+                                 #.None
+                                 (/.except ..tag_does_not_belong_to_record [key recordT]))))
+                           (: (Dictionary Nat Code)
+                              (dictionary.empty n.hash))
+                           record)
        .let [ordered_tuple (list\map (function (_ idx)
                                        (maybe.trusted (dictionary.value idx idx->val)))
                                      tuple_range)]]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/directive.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/directive.lux
index 3c6425da3..98163f30d 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/directive.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/directive.lux
@@ -11,7 +11,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold monoid)]]]]]
+      ["." list ("#\." mix monoid)]]]]]
   ["." // #_
    ["#." extension]
    ["#." analysis
@@ -101,7 +101,7 @@
                 _
                 (|> expansion
                     (monad.map ! (recur archive))
-                    (\ ! map (list\fold /.merge_requirements /.no_requirements)))))
+                    (\ ! map (list\mix /.merge_requirements /.no_requirements)))))
 
             _
             (//.except ..not_a_directive code)))))))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension.lux
index 206ae9f64..18da2442f 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension.lux
@@ -103,10 +103,10 @@
     (-> Extender (Bundle s i o) (Operation s i o Any)))
   (|> extensions
       dictionary.entries
-      (monad.fold //.monad
-                  (function (_ [extension handle] output)
-                    (..install extender extension handle))
-                  [])))
+      (monad.mix //.monad
+                 (function (_ [extension handle] output)
+                   (..install extender extension handle))
+                 [])))
 
 (def: .public (apply archive phase [name parameters])
   (All [s i o]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/analysis/jvm.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/analysis/jvm.lux
index 508242cd8..d4ffdbb2b 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/analysis/jvm.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/analysis/jvm.lux
@@ -18,7 +18,7 @@
      ["." text ("#\." equivalence)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." fold monad monoid)]
+      ["." list ("#\." mix monad monoid)]
       ["." array]
       ["." dictionary (#+ Dictionary)]]]
     [math
@@ -1110,20 +1110,20 @@
                               true)
            arity_matches? (n.= (list.size inputsJT) (list.size parameters))
            inputs_match? (and arity_matches?
-                              (list\fold (function (_ [expectedJC actualJC] prev)
-                                           (and prev
-                                                (jvm\= expectedJC (: (Type Value)
-                                                                     (case (jvm_parser.var? actualJC)
-                                                                       (#.Some name)
-                                                                       (|> aliasing
-                                                                           (dictionary.value name)
-                                                                           (maybe.else name)
-                                                                           jvm.var)
-
-                                                                       #.None
-                                                                       actualJC)))))
-                                         true
-                                         (list.zipped/2 parameters inputsJT)))]]
+                              (list\mix (function (_ [expectedJC actualJC] prev)
+                                          (and prev
+                                               (jvm\= expectedJC (: (Type Value)
+                                                                    (case (jvm_parser.var? actualJC)
+                                                                      (#.Some name)
+                                                                      (|> aliasing
+                                                                          (dictionary.value name)
+                                                                          (maybe.else name)
+                                                                          jvm.var)
+
+                                                                      #.None
+                                                                      actualJC)))))
+                                        true
+                                        (list.zipped/2 parameters inputsJT)))]]
     (in (and correct_class?
              correct_method?
              static_matches?
@@ -1685,7 +1685,7 @@
        [scope bodyA] (|> arguments'
                          (#.Item [self_name selfT])
                          list.reversed
-                         (list\fold scope.with_local (analyse archive body))
+                         (list\mix scope.with_local (analyse archive body))
                          (typeA.with_type .Any)
                          /////analysis.with_scope)]
       (in (/////analysis.tuple (list (/////analysis.text ..constructor_tag)
@@ -1761,7 +1761,7 @@
        [scope bodyA] (|> arguments'
                          (#.Item [self_name selfT])
                          list.reversed
-                         (list\fold scope.with_local (analyse archive body))
+                         (list\mix scope.with_local (analyse archive body))
                          (typeA.with_type returnT)
                          /////analysis.with_scope)]
       (in (/////analysis.tuple (list (/////analysis.text ..virtual_tag)
@@ -1834,7 +1834,7 @@
                              arguments)
        [scope bodyA] (|> arguments'
                          list.reversed
-                         (list\fold scope.with_local (analyse archive body))
+                         (list\mix scope.with_local (analyse archive body))
                          (typeA.with_type returnT)
                          /////analysis.with_scope)]
       (in (/////analysis.tuple (list (/////analysis.text ..static_tag)
@@ -1930,19 +1930,19 @@
                                           check.existential)]
                                (in [var exT])))
                          vars)]
-    (in (list\fold (function (_ [varJ varT] mapping)
-                     (dictionary.has (jvm_parser.name varJ) varT mapping))
-                   mapping
-                   pairings))))
+    (in (list\mix (function (_ [varJ varT] mapping)
+                    (dictionary.has (jvm_parser.name varJ) varT mapping))
+                  mapping
+                  pairings))))
 
 (def: .public (with_override_mapping supers parent_type mapping)
   (-> (List (Type Class)) (Type Class) Mapping (Operation Mapping))
   (do phase.monad
     [override_mapping (..override_mapping mapping supers parent_type)]
-    (in (list\fold (function (_ [super_var bound_type] mapping)
-                     (dictionary.has super_var bound_type mapping))
-                   mapping
-                   override_mapping))))
+    (in (list\mix (function (_ [super_var bound_type] mapping)
+                    (dictionary.has super_var bound_type mapping))
+                  mapping
+                  override_mapping))))
 
 (def: .public (hide_method_body arity bodyA)
   (-> Nat Analysis Analysis)
@@ -2001,7 +2001,7 @@
        [scope bodyA] (|> arguments'
                          (#.Item [self_name selfT])
                          list.reversed
-                         (list\fold scope.with_local (analyse archive body))
+                         (list\mix scope.with_local (analyse archive body))
                          (typeA.with_type returnT)
                          /////analysis.with_scope)]
       (in (/////analysis.tuple (list (/////analysis.text ..overriden_tag)
@@ -2066,14 +2066,14 @@
                         (n.= (list.size expected_parameters)
                              (list.size actual_parameters)))]
     (in (|> (list.zipped/2 expected_parameters actual_parameters)
-            (list\fold (function (_ [expected actual] mapping)
-                         (case (jvm_parser.var? actual)
-                           (#.Some actual)
-                           (dictionary.has actual expected mapping)
-                           
-                           #.None
-                           mapping))
-                       jvm_alias.fresh)))))
+            (list\mix (function (_ [expected actual] mapping)
+                        (case (jvm_parser.var? actual)
+                          (#.Some actual)
+                          (dictionary.has actual expected mapping)
+                          
+                          #.None
+                          mapping))
+                      jvm_alias.fresh)))))
 
 (def: (anonymous_class_name module id)
   (-> Module Nat Text)
@@ -2125,12 +2125,12 @@
          _ (monad.map ! (|>> ..reflection (..ensure_fresh_class! class_loader)) super_interfaces)
          parameters (typeA.with_env
                       (..parameter_types parameters))
-         .let [mapping (list\fold (function (_ [parameterJ parameterT] mapping)
-                                    (dictionary.has (jvm_parser.name parameterJ)
-                                                    parameterT
-                                                    mapping))
-                                  luxT.fresh
-                                  parameters)]
+         .let [mapping (list\mix (function (_ [parameterJ parameterT] mapping)
+                                   (dictionary.has (jvm_parser.name parameterJ)
+                                                   parameterT
+                                                   mapping))
+                                 luxT.fresh
+                                 parameters)]
          super_classT (typeA.with_env
                         (luxT.check (luxT.class mapping) (..signature super_class)))
          super_interfaceT+ (typeA.with_env
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux
index 0242d94b6..29de45227 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux
@@ -14,7 +14,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary]
       ["." row]]]
     [macro
@@ -263,10 +263,10 @@
         [parameters (directive.lifted_analysis
                      (typeA.with_env
                        (jvm.parameter_types parameters)))
-         .let [mapping (list\fold (function (_ [parameterJ parameterT] mapping)
-                                    (dictionary.has (parser.name parameterJ) parameterT mapping))
-                                  luxT.fresh
-                                  parameters)]
+         .let [mapping (list\mix (function (_ [parameterJ parameterT] mapping)
+                                   (dictionary.has (parser.name parameterJ) parameterT mapping))
+                                 luxT.fresh
+                                 parameters)]
          super_classT (directive.lifted_analysis
                        (typeA.with_env
                          (luxT.check (luxT.class mapping) (..signature super_class))))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux
index e8518812e..49b696138 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux
@@ -15,7 +15,7 @@
      [collection
       ["." dictionary]
       ["." set]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
@@ -75,7 +75,7 @@
 ...                                                            branchG])))
 ...                                               conditionals))]
 ...                  (in (_.let (list [@input inputG])
-...                          (list (list\fold (function (_ [test then] else)
+...                          (list (list\mix (function (_ [test then] else)
 ...                                             (_.if test then else))
 ...                                           elseG
 ...                                           conditionalsG))))))]))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux
index 0e0c91e60..142691489 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux
@@ -14,7 +14,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." dictionary]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
@@ -70,18 +70,18 @@
                                                     [branchG (phase archive branch)]
                                                     (in [(|> chars
                                                              (list\map (|>> .int _.int (_.= @input)))
-                                                             (list\fold (function (_ clause total)
-                                                                          (if (same? _.nil total)
-                                                                            clause
-                                                                            (_.or clause total)))
-                                                                        _.nil))
+                                                             (list\mix (function (_ clause total)
+                                                                         (if (same? _.nil total)
+                                                                           clause
+                                                                           (_.or clause total)))
+                                                                       _.nil))
                                                          branchG])))
                                               conditionals))
                   .let [closure (_.closure (list @input)
-                                           (list\fold (function (_ [test then] else)
-                                                        (_.if test (_.return then) else))
-                                                      (_.return elseG)
-                                                      conditionalsG))]]
+                                           (list\mix (function (_ [test then] else)
+                                                       (_.if test (_.return then) else))
+                                                     (_.return elseG)
+                                                     conditionalsG))]]
                  (in (_.apply/1 closure inputG))))]))
 
 (def: lux_procs
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux
index 02ddfbd71..3acac79be 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux
@@ -15,7 +15,7 @@
      [collection
       ["." dictionary]
       ["." set]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
@@ -74,11 +74,11 @@
                                                     [branchG (phase archive branch)]
                                                     (in [(|> chars
                                                              (list\map (|>> .int _.int (_.=== @input)))
-                                                             (list\fold (function (_ clause total)
-                                                                          (if (same? _.null total)
-                                                                            clause
-                                                                            (_.or clause total)))
-                                                                        _.null))
+                                                             (list\mix (function (_ clause total)
+                                                                         (if (same? _.null total)
+                                                                           clause
+                                                                           (_.or clause total)))
+                                                                       _.null))
                                                          branchG])))
                                               conditionals))
                   .let [foreigns (|> conditionals
@@ -89,10 +89,10 @@
                                      set.list)
                         @expression (_.constant (reference.artifact [context_module context_artifact]))
                         directive (_.define_function @expression (list& (_.parameter @input) (list\map _.reference foreigns))
-                                                     (list\fold (function (_ [test then] else)
-                                                                  (_.if test (_.return then) else))
-                                                                (_.return elseG)
-                                                                conditionalsG))]
+                                                     (list\mix (function (_ [test then] else)
+                                                                 (_.if test (_.return then) else))
+                                                               (_.return elseG)
+                                                               conditionalsG))]
                   _ (generation.execute! directive)
                   _ (generation.save! context_artifact directive)]
                  (in (_.apply/* (list& inputG foreigns) @expression))))]))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux
index c531d05d9..6f51e40f1 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux
@@ -14,26 +14,72 @@
       ["%" format (#+ format)]]
      [collection
       ["." dictionary]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
     [target
-     ["_" python (#+ Expression)]]]]
+     ["_" python (#+ Expression Statement)]]]]
   ["." //// #_
    ["/" bundle]
    ["/#" // #_
     ["." extension]
     [generation
+     ["." reference]
      [extension (#+ Nullary Unary Binary Trinary
                     nullary unary binary trinary)]
      ["//" python #_
-      ["#." runtime (#+ Operation Phase Handler Bundle Generator)]]]
+      ["#." runtime (#+ Operation Phase Phase! Handler Bundle Generator)]
+      ["#." primitive]
+      ["#." structure]
+      ["#." reference]
+      ["#." function]
+      ["#." case]
+      ["#." loop]]]
     [//
-     [synthesis (#+ %synthesis)]
+     [analysis (#+)]
+     ["." synthesis (#+ %synthesis)]
      ["." generation]
      [///
-      ["#" phase]]]]])
+      ["#" phase ("#\." monad)]]]]])
+
+(def: .public (statement expression archive synthesis)
+  Phase!
+  (case synthesis
+    ... TODO: Get rid of this ASAP
+    (#synthesis.Extension "lux syntax char case!" parameters)
+    (do /////.monad
+      [body (expression archive synthesis)]
+      (in (:as (Statement Any) body)))
+    
+    (^template [<tag>]
+      [(^ (<tag> value))
+       (/////\map _.return (expression archive synthesis))])
+    ([synthesis.bit]
+     [synthesis.i64]
+     [synthesis.f64]
+     [synthesis.text]
+     [synthesis.variant]
+     [synthesis.tuple]
+     [#synthesis.Reference]
+     [synthesis.branch/get]
+     [synthesis.function/apply]
+     [#synthesis.Extension])
+
+    (^ (synthesis.branch/case case))
+    (//case.case! false statement expression archive case)
+
+    (^template [<tag> <generator>]
+      [(^ (<tag> value))
+       (<generator> statement expression archive value)])
+    ([synthesis.branch/let //case.let!]
+     [synthesis.branch/if //case.if!]
+     [synthesis.loop/scope //loop.scope!]
+     [synthesis.loop/recur //loop.recur!])
+
+    (^ (synthesis.function/abstraction abstraction))
+    (/////\map _.return (//function.function statement expression archive abstraction))
+    ))
 
 (def: .public (custom [parser handler])
   (All [s]
@@ -59,28 +105,48 @@
              (function (_ extension_name phase archive [input else conditionals])
                (do {! /////.monad}
                  [inputG (phase archive input)
-                  elseG (phase archive else)
+                  else! (..statement phase archive else)
                   @input (\ ! map _.var (generation.identifier "input"))
-                  conditionalsG (: (Operation (List [(Expression Any)
-                                                     (Expression Any)]))
+                  conditionals! (: (Operation (List [(Expression Any)
+                                                     (Statement Any)]))
                                    (monad.map ! (function (_ [chars branch])
                                                   (do !
-                                                    [branchG (phase archive branch)]
+                                                    [branch! (..statement phase archive branch)]
                                                     (in [(|> chars
                                                              (list\map (|>> .int _.int (_.= @input)))
-                                                             (list\fold (function (_ clause total)
-                                                                          (if (same? _.none total)
-                                                                            clause
-                                                                            (_.or clause total)))
-                                                                        _.none))
-                                                         branchG])))
+                                                             (list\mix (function (_ clause total)
+                                                                         (if (same? _.none total)
+                                                                           clause
+                                                                           (_.or clause total)))
+                                                                       _.none))
+                                                         branch!])))
                                               conditionals))
-                  .let [closure (_.lambda (list @input)
-                                          (list\fold (function (_ [test then] else)
-                                                       (_.? test then else))
-                                                     elseG
-                                                     conditionalsG))]]
-                 (in (_.apply/* closure (list inputG)))))]))
+                  ... .let [dependencies (//case.dependencies (list\mix (function (_ right left)
+                  ...                                                      (synthesis.path/seq left right))
+                  ...                                                    (synthesis.path/then input)
+                  ...                                                    (#.Item (synthesis.path/then else)
+                  ...                                                            (list\map (|>> product.right
+                  ...                                                                           synthesis.path/then)
+                  ...                                                                      conditionals))))
+                  ...       @closure (_.var (reference.artifact artifact_id))
+                  ...       closure (_.def @closure dependencies
+                  ...                      ($_ _.then
+                  ...                          (_.set (list @input) inputG)
+                  ...                          (list\mix (function (_ [test then!] else!)
+                  ...                                       (_.if test then! else!))
+                  ...                                     else!
+                  ...                                     conditionals!)))]
+                  ... _ (generation.execute! closure)
+                  ... _ (generation.save! (product.right artifact_id) #.None closure)
+                  ]
+                 ... (in (_.apply/* @closure dependencies))
+                 (in (:as (Expression Any)
+                          ($_ _.then
+                              (_.set (list @input) inputG)
+                              (list\mix (function (_ [test then!] else!)
+                                          (_.if test then! else!))
+                                        else!
+                                        conditionals!))))))]))
 
 (def: lux_procs
   Bundle
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/r/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/r/common.lux
index 25e244035..3cc7cf91c 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/r/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/r/common.lux
@@ -15,7 +15,7 @@
      [collection
       ["." dictionary]
       ["." set]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
@@ -75,7 +75,7 @@
 ... ...                                                            branchG])))
 ... ...                                               conditionals))]
 ... ...                  (in (_.let (list [@input inputG])
-... ...                          (list (list\fold (function (_ [test then] else)
+... ...                          (list (list\mix (function (_ [test then] else)
 ... ...                                             (_.if test then else))
 ... ...                                           elseG
 ... ...                                           conditionalsG))))))]))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux
index db479ccd3..253b342e8 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux
@@ -14,7 +14,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." dictionary]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
@@ -67,18 +67,18 @@
                                                     [branchG (phase archive branch)]
                                                     (in [(|> chars
                                                              (list\map (|>> .int _.int (_.= @input)))
-                                                             (list\fold (function (_ clause total)
-                                                                          (if (same? _.nil total)
-                                                                            clause
-                                                                            (_.or clause total)))
-                                                                        _.nil))
+                                                             (list\mix (function (_ clause total)
+                                                                         (if (same? _.nil total)
+                                                                           clause
+                                                                           (_.or clause total)))
+                                                                       _.nil))
                                                          branchG])))
                                               conditionals))
                   .let [closure (_.lambda #.None (list @input)
-                                          (list\fold (function (_ [test then] else)
-                                                       (_.if test (_.return then) else))
-                                                     (_.return elseG)
-                                                     conditionalsG))]]
+                                          (list\mix (function (_ [test then] else)
+                                                      (_.if test (_.return then) else))
+                                                    (_.return elseG)
+                                                    conditionalsG))]]
                  (in (_.apply_lambda/* (list inputG) closure))))]))
 
 (def: lux_procs
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux
index 2b2fca71f..79c3cce7b 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux
@@ -15,7 +15,7 @@
      [collection
       ["." dictionary]
       ["." set]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["f" frac]]]
@@ -75,10 +75,10 @@
                                                          branchG])))
                                               conditionals))]
                  (in (_.let (list [@input inputG])
-                       (list\fold (function (_ [test then] else)
-                                    (_.if test then else))
-                                  elseG
-                                  conditionalsG)))))]))
+                       (list\mix (function (_ [test then] else)
+                                   (_.if test then else))
+                                 elseG
+                                 conditionalsG)))))]))
 
 (def: lux_procs
   Bundle
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/case.lux
index fae91850c..982b48475 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/case.lux
@@ -9,7 +9,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold monoid)]
+      ["." list ("#\." functor mix monoid)]
       ["." set]]]
     [math
      [number
@@ -63,16 +63,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueG (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left //runtime.tuple//left]
-                                      [#.Right //runtime.tuple//right]))]
-                       (method source)))
-                   valueG
-                   pathP))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left //runtime.tuple//left]
+                                     [#.Right //runtime.tuple//right]))]
+                      (method source)))
+                  valueG
+                  pathP))))
 
 (def: @savepoint (_.var "lux_pm_savepoint"))
 (def: @cursor (_.var "lux_pm_cursor"))
@@ -180,10 +180,10 @@
                                                 ..peek])
                                           then!])))
                                (#.Item item))]
-           (in (list\fold (function (_ [when then] else)
-                            (_.if when then else))
-                          (_.go @fail)
-                          clauses)))])
+           (in (list\mix (function (_ [when then] else)
+                           (_.if when then else))
+                         (_.go @fail)
+                         clauses)))])
       ([#/////synthesis.I64_Fork //primitive.i64 _.=/2]
        [#/////synthesis.F64_Fork //primitive.f64 _.=/2]
        [#/////synthesis.Text_Fork //primitive.text _.string=/2])
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/function.lux
index 41faa95b6..c54bae779 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/function.lux
@@ -10,7 +10,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor)]]]
     [target
      ["_" common_lisp (#+ Expression Var/1)]]]]
   ["." // #_
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux
index 7eca077bf..0b2328715 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux
@@ -290,4 +290,4 @@
          (row.row [(%.nat ..module_id)
                    (|> ..runtime
                        _.code
-                       (\ encoding.utf8 encode))])])))
+                       (\ encoding.utf8 encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/case.lux
index 9b0431808..edce73735 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/case.lux
@@ -8,7 +8,7 @@
     [data
      ["." text]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["n" nat]]]
@@ -77,16 +77,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueO (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.i32 (.int lefts)))])
-                                     ([#.Left  //runtime.tuple//left]
-                                      [#.Right //runtime.tuple//right]))]
-                       (method source)))
-                   valueO
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.i32 (.int lefts)))])
+                                    ([#.Left  //runtime.tuple//left]
+                                     [#.Right //runtime.tuple//right]))]
+                      (method source)))
+                  valueO
+                  (list.reversed pathP)))))
 
 (def: @savepoint (_.var "lux_pm_cursor_savepoint"))
 (def: @cursor (_.var "lux_pm_cursor"))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/function.lux
index fdfc768a0..90f1cca9a 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/function.lux
@@ -8,7 +8,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [target
      ["_" js (#+ Expression Computation Var Statement)]]]]
   ["." // #_
@@ -81,12 +81,12 @@
            apply_poly (.function (_ args func)
                         (|> func (_.do "apply" (list _.null args))))
            initialize_self! (_.define (//case.register 0) @self)
-           initialize! (list\fold (.function (_ post pre!)
-                                    ($_ _.then
-                                        pre!
-                                        (_.define (..input post) (_.at (_.i32 (.int post)) @@arguments))))
-                                  initialize_self!
-                                  (list.indices arity))]
+           initialize! (list\mix (.function (_ post pre!)
+                                   ($_ _.then
+                                       pre!
+                                       (_.define (..input post) (_.at (_.i32 (.int post)) @@arguments))))
+                                 initialize_self!
+                                 (list.indices arity))]
      environment (monad.map ! (expression archive) environment)
      .let [[definition instantiation] (with_closure @self environment
                                         ($_ _.then
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/loop.lux
index 08a3a7c80..8c3762238 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/loop.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["n" nat]]]
@@ -39,7 +39,7 @@
                       (_.define variable value)
                       (_.set variable value)))))
       list.reversed
-      (list\fold _.then body)))
+      (list\mix _.then body)))
 
 (def: .public (scope! statement expression archive [start initsS+ bodyS])
   (Generator! (Scope Synthesis))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux
index 368c69bb0..3ea974987 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux
@@ -783,4 +783,4 @@
                    #.None
                    (|> ..runtime
                        _.code
-                       (\ utf8.codec encode))])])))
+                       (\ utf8.codec encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux
index 417f74d2d..928fbb101 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux
@@ -10,7 +10,7 @@
       ["." i32]
       ["n" nat]]
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [target
      [jvm
       ["_" bytecode (#+ Label Bytecode) ("#\." monad)]
@@ -241,16 +241,16 @@
   (Generator [(List synthesis.Member) Synthesis])
   (do phase.monad
     [recordG (phase archive recordS)]
-    (in (list\fold (function (_ step so_far)
-                     (.let [next (.case step
-                                   (#.Left lefts)
-                                   (..left_projection lefts)
-                                   
-                                   (#.Right lefts)
-                                   (..right_projection lefts))]
-                       (_.composite so_far next)))
-                   recordG
-                   (list.reversed path)))))
+    (in (list\mix (function (_ step so_far)
+                    (.let [next (.case step
+                                  (#.Left lefts)
+                                  (..left_projection lefts)
+                                  
+                                  (#.Right lefts)
+                                  (..right_projection lefts))]
+                      (_.composite so_far next)))
+                  recordG
+                  (list.reversed path)))))
 
 (def: .public (case phase archive [valueS path])
   (Generator [Synthesis Path])
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/case.lux
index ef53de88c..67c156db0 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/case.lux
@@ -7,7 +7,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [target
      ["_" lua (#+ Expression Var Statement)]]]]
@@ -62,16 +62,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueO (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left  //runtime.tuple//left]
-                                      [#.Right //runtime.tuple//right]))]
-                       (method source)))
-                   valueO
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left  //runtime.tuple//left]
+                                     [#.Right //runtime.tuple//right]))]
+                      (method source)))
+                  valueO
+                  (list.reversed pathP)))))
 
 (def: .public (if expression archive [testS thenS elseS])
   (Generator [Synthesis Synthesis Synthesis])
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/function.lux
index 509808d62..88f59675d 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/function.lux
@@ -10,7 +10,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [target
      ["_" lua (#+ Var Expression Label Statement)]]]]
   ["." // #_
@@ -79,12 +79,12 @@
            @scope (..@scope function_name)
            @self (_.var (///reference.artifact function_name))
            initialize_self! (_.local/1 (//case.register 0) @self)
-           initialize! (list\fold (.function (_ post pre!)
-                                    ($_ _.then
-                                        pre!
-                                        (_.local/1 (..input post) (_.item (|> post ++ .int _.int) @curried))))
-                                  initialize_self!
-                                  (list.indices arity))
+           initialize! (list\mix (.function (_ post pre!)
+                                   ($_ _.then
+                                       pre!
+                                       (_.local/1 (..input post) (_.item (|> post ++ .int _.int) @curried))))
+                                 initialize_self!
+                                 (list.indices arity))
            pack (|>> (list) _.array)
            unpack (_.apply/1 (_.var "table.unpack"))
            @var_args (_.var "...")]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/runtime.lux
index 988274333..997030d05 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/lua/runtime.lux
@@ -430,4 +430,4 @@
                    #.None
                    (|> ..runtime
                        _.code
-                       (\ utf8.codec encode))])])))
+                       (\ utf8.codec encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/case.lux
index 28744fe33..ccea519f2 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/case.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [math
      [number
@@ -83,16 +83,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueG (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left //runtime.tuple//left]
-                                      [#.Right //runtime.tuple//right]))]
-                       (method source)))
-                   valueG
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left //runtime.tuple//left]
+                                     [#.Right //runtime.tuple//right]))]
+                      (method source)))
+                  valueG
+                  (list.reversed pathP)))))
 
 (def: @savepoint (_.var "lux_pm_savepoint"))
 (def: @cursor (_.var "lux_pm_cursor"))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/function.lux
index 175fadfc3..c749c30f2 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/function.lux
@@ -10,7 +10,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [target
      ["_" php (#+ Var Global Expression Argument Label Statement)]]]]
   ["." // #_
@@ -84,12 +84,12 @@
            @selfG (_.global (///reference.artifact function_name))
            @selfL (_.var (///reference.artifact function_name))
            initialize_self! (_.set! (//case.register 0) @selfL)
-           initialize! (list\fold (.function (_ post pre!)
-                                    ($_ _.then
-                                        pre!
-                                        (_.set! (..input post) (_.item (|> post .int _.int) @curried))))
-                                  initialize_self!
-                                  (list.indices arity))]
+           initialize! (list\mix (.function (_ post pre!)
+                                   ($_ _.then
+                                       pre!
+                                       (_.set! (..input post) (_.item (|> post .int _.int) @curried))))
+                                 initialize_self!
+                                 (list.indices arity))]
      .let [[definition instantiation] (..with_closure closureG+ @selfG @selfL
                                         ($_ _.then
                                             (_.set! @num_args (_.func_num_args/0 []))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/loop.lux
index 9f66b15b3..8baa09008 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/loop.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set (#+ Set)]]]
     [math
      [number
@@ -45,7 +45,7 @@
                   (let [variable (//case.register (n.+ offset register))]
                     (_.set! variable value))))
       list.reversed
-      (list\fold _.then body)))
+      (list\mix _.then body)))
 
 (def: .public (scope! statement expression archive [start initsS+ bodyS])
   (Generator! (Scope Synthesis))
@@ -89,7 +89,7 @@
                                           (set.of_list _.hash)))
              [directive instantiation] (: [Statement Expression]
                                           (case (|> (list\map referenced_variables initsS+)
-                                                    (list\fold set.union (referenced_variables bodyS))
+                                                    (list\mix set.union (referenced_variables bodyS))
                                                     (set.difference loop_variables)
                                                     set.list)
                                             #.End
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/runtime.lux
index bd36c0785..8dfb51dd7 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/php/runtime.lux
@@ -607,4 +607,4 @@
          (row.row [..module_id
                    (|> ..runtime
                        _.code
-                       (\ utf8.codec encode))])])))
+                       (\ utf8.codec encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python.lux
index 4426bc6c8..10cb4d3b9 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python.lux
@@ -8,7 +8,7 @@
     [target
      ["_" python]]]]
   ["." / #_
-   [runtime (#+ Phase Phase!)]
+   [runtime (#+ Phase)]
    ["#." primitive]
    ["#." structure]
    ["#." reference]
@@ -18,7 +18,10 @@
    ["/#" // #_
     ["#." reference]
     ["/#" // #_
-     ["#." extension]
+     ["#." extension
+      [generation
+       [python
+        ["#/." common]]]]
      ["/#" // #_
       [analysis (#+)]
       ["#." synthesis]
@@ -27,38 +30,6 @@
        [reference (#+)
         [variable (#+)]]]]]]])
 
-(def: (statement expression archive synthesis)
-  Phase!
-  (case synthesis
-    (^template [<tag>]
-      [(^ (<tag> value))
-       (//////phase\map _.return (expression archive synthesis))])
-    ([////synthesis.bit]
-     [////synthesis.i64]
-     [////synthesis.f64]
-     [////synthesis.text]
-     [////synthesis.variant]
-     [////synthesis.tuple]
-     [#////synthesis.Reference]
-     [////synthesis.branch/get]
-     [////synthesis.function/apply]
-     [#////synthesis.Extension])
-
-    (^ (////synthesis.branch/case case))
-    (/case.case! false statement expression archive case)
-
-    (^template [<tag> <generator>]
-      [(^ (<tag> value))
-       (<generator> statement expression archive value)])
-    ([////synthesis.branch/let /case.let!]
-     [////synthesis.branch/if /case.if!]
-     [////synthesis.loop/scope /loop.scope!]
-     [////synthesis.loop/recur /loop.recur!])
-
-    (^ (////synthesis.function/abstraction abstraction))
-    (//////phase\map _.return (/function.function statement expression archive abstraction))
-    ))
-
 (exception: .public cannot_recur_as_an_expression)
 
 (def: .public (expression archive synthesis)
@@ -82,7 +53,7 @@
     (//reference.reference /reference.system archive value)
 
     (^ (////synthesis.branch/case case))
-    (/case.case ..statement expression archive case)
+    (/case.case ///extension/common.statement expression archive case)
 
     (^ (////synthesis.branch/let let))
     (/case.let expression archive let)
@@ -94,13 +65,13 @@
     (/case.get expression archive get)
 
     (^ (////synthesis.loop/scope scope))
-    (/loop.scope ..statement expression archive scope)
+    (/loop.scope ///extension/common.statement expression archive scope)
 
     (^ (////synthesis.loop/recur updates))
     (//////phase.except ..cannot_recur_as_an_expression [])
 
     (^ (////synthesis.function/abstraction abstraction))
-    (/function.function ..statement expression archive abstraction)
+    (/function.function ///extension/common.statement expression archive abstraction)
 
     (^ (////synthesis.function/apply application))
     (/function.apply expression archive application)
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/case.lux
index 5d66730d1..6262f0104 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/case.lux
@@ -7,7 +7,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [math
      [number
@@ -88,16 +88,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueO (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left //runtime.tuple::left]
-                                      [#.Right //runtime.tuple::right]))]
-                       (method source)))
-                   valueO
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left //runtime.tuple::left]
+                                     [#.Right //runtime.tuple::right]))]
+                      (method source)))
+                  valueO
+                  (list.reversed pathP)))))
 
 (def: @savepoint (_.var "lux_pm_savepoint"))
 (def: @cursor (_.var "lux_pm_cursor"))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/function.lux
index eee714ea8..f4b31f61d 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/function.lux
@@ -8,7 +8,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [target
      ["_" python (#+ SVar Expression Statement)]]]]
   ["." // #_
@@ -80,12 +80,12 @@
            apply_poly (.function (_ args func)
                         (_.apply_poly (list) args func))
            initialize_self! (_.set (list (//case.register 0)) @self)
-           initialize! (list\fold (.function (_ post pre!)
-                                    ($_ _.then
-                                        pre!
-                                        (_.set (list (..input post)) (_.item (|> post .int _.int) @curried))))
-                                  initialize_self!
-                                  (list.indices arity))]]
+           initialize! (list\mix (.function (_ post pre!)
+                                   ($_ _.then
+                                       pre!
+                                       (_.set (list (..input post)) (_.item (|> post .int _.int) @curried))))
+                                 initialize_self!
+                                 (list.indices arity))]]
     (with_closure function_artifact @self environment
       (_.def @self (list (_.poly @curried))
              ($_ _.then
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/loop.lux
index 6739e6ec5..50469f64e 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/loop.lux
@@ -8,7 +8,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [math
      [number
@@ -39,7 +39,7 @@
                   (_.set (list (//case.register (n.+ offset register)))
                          value)))
       list.reversed
-      (list\fold _.then body)))
+      (list\mix _.then body)))
 
 (def: .public (set_scope body!)
   (-> (Statement Any) (Statement Any))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux
index 207b74654..9952ea02d 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux
@@ -458,4 +458,4 @@
                      #.None
                      (|> ..runtime
                          _.code
-                         (\ utf8.codec encode))])]))))
+                         (\ utf8.codec encoded))])]))))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/case.lux
index 288fdc4bf..e751e412b 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/case.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [macro
      ["." template]]
@@ -66,16 +66,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueO (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left  //runtime.tuple::left]
-                                      [#.Right //runtime.tuple::right]))]
-                       (method source)))
-                   valueO
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left  //runtime.tuple::left]
+                                     [#.Right //runtime.tuple::right]))]
+                      (method source)))
+                  valueO
+                  (list.reversed pathP)))))
 
 (def: $savepoint (_.var "lux_pm_cursor_savepoint"))
 (def: $cursor (_.var "lux_pm_cursor"))
@@ -171,10 +171,10 @@
                                                ..peek)
                                           then!])))
                                (#.Item item))]
-           (in (list\fold (function (_ [when then] else)
-                            (_.if when then else))
-                          ..fail!
-                          clauses)))])
+           (in (list\mix (function (_ [when then] else)
+                           (_.if when then else))
+                         ..fail!
+                         clauses)))])
       ([#/////synthesis.I64_Fork //primitive.i64 //runtime.i64::=]
        [#/////synthesis.F64_Fork //primitive.f64 _.=]
        [#/////synthesis.Text_Fork //primitive.text _.=])
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/function.lux
index 4ae6231c5..f2335374c 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/function.lux
@@ -10,7 +10,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [target
      ["_" r (#+ Expression SVar)]]]]
   ["." // #_
@@ -97,7 +97,7 @@
                                              (|> arity
                                                  list.indices
                                                  (list\map input_declaration)
-                                                 (list\fold _.then bodyO)))]
+                                                 (list\mix _.then bodyO)))]
                                         [(|> $num_args (_.> arityO))
                                          (let [arity_args (_.slice (_.int +1) arityO $curried)
                                                output_func_args (_.slice (|> arityO (_.+ (_.int +1)))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/loop.lux
index 859744980..28ac47ffb 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/loop.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor)]
       ["." set (#+ Set)]]]
     [math
      [number
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/runtime.lux
index 21f2ded5a..f0ea2c3fb 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/r/runtime.lux
@@ -850,4 +850,4 @@
          (row.row [(%.nat ..module_id)
                    (|> ..runtime
                        _.code
-                       (\ utf8.codec encode))])])))
+                       (\ utf8.codec encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/case.lux
index 2af4e0dee..df08d8a21 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/case.lux
@@ -9,7 +9,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [math
      [number
@@ -90,16 +90,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueO (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left //runtime.tuple//left]
-                                      [#.Right //runtime.tuple//right]))]
-                       (method source)))
-                   valueO
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left //runtime.tuple//left]
+                                     [#.Right //runtime.tuple//right]))]
+                      (method source)))
+                  valueO
+                  (list.reversed pathP)))))
 
 (def: @savepoint (_.local "lux_pm_savepoint"))
 (def: @cursor (_.local "lux_pm_cursor"))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/function.lux
index 192807829..efc132065 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/function.lux
@@ -8,7 +8,7 @@
      [text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [target
      ["_" ruby (#+ LVar GVar Expression Statement)]]]]
   ["." // #_
@@ -77,12 +77,12 @@
            @num_args (_.local "num_args")
            @self (_.local function_name)
            initialize_self! (_.set (list (//case.register 0)) @self)
-           initialize! (list\fold (.function (_ post pre!)
-                                    ($_ _.then
-                                        pre!
-                                        (_.set (list (..input post)) (_.item (|> post .int _.int) @curried))))
-                                  initialize_self!
-                                  (list.indices arity))
+           initialize! (list\mix (.function (_ post pre!)
+                                   ($_ _.then
+                                       pre!
+                                       (_.set (list (..input post)) (_.item (|> post .int _.int) @curried))))
+                                 initialize_self!
+                                 (list.indices arity))
            [declaration instatiation] (with_closure closureO+ function_name
                                         (_.lambda (#.Some @self) (list (_.variadic @curried))
                                                   ($_ _.then
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/loop.lux
index 9fe46c86d..caf3afb78 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/loop.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [math
      [number
@@ -39,7 +39,7 @@
                   (_.set (list (//case.register (n.+ offset register)))
                          value)))
       list.reversed
-      (list\fold _.then body)))
+      (list\mix _.then body)))
 
 (def: symbol
   (_.symbol "lux_continue"))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/runtime.lux
index 8a825e466..b083c0a67 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/ruby/runtime.lux
@@ -401,4 +401,4 @@
                    #.None
                    (|> ..runtime
                        _.code
-                       (\ utf8.codec encode))])])))
+                       (\ utf8.codec encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/case.lux
index ae841dc5b..e68b23464 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/case.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [macro
      ["." template]]
@@ -64,16 +64,16 @@
   (Generator [(List Member) Synthesis])
   (do ///////phase.monad
     [valueO (expression archive valueS)]
-    (in (list\fold (function (_ side source)
-                     (.let [method (.case side
-                                     (^template [<side> <accessor>]
-                                       [(<side> lefts)
-                                        (<accessor> (_.int (.int lefts)))])
-                                     ([#.Left  //runtime.tuple//left]
-                                      [#.Right //runtime.tuple//right]))]
-                       (method source)))
-                   valueO
-                   (list.reversed pathP)))))
+    (in (list\mix (function (_ side source)
+                    (.let [method (.case side
+                                    (^template [<side> <accessor>]
+                                      [(<side> lefts)
+                                       (<accessor> (_.int (.int lefts)))])
+                                    ([#.Left  //runtime.tuple//left]
+                                     [#.Right //runtime.tuple//right]))]
+                      (method source)))
+                  valueO
+                  (list.reversed pathP)))))
 
 (def: @savepoint (_.var "lux_pm_cursor_savepoint"))
 (def: @cursor (_.var "lux_pm_cursor"))
@@ -165,10 +165,10 @@
                                                ..peek)
                                           then!])))
                                (#.Item item))]
-           (in (list\fold (function (_ [when then] else)
-                            (_.if when then else))
-                          ..fail!
-                          clauses)))])
+           (in (list\mix (function (_ [when then] else)
+                           (_.if when then else))
+                         ..fail!
+                         clauses)))])
       ([#/////synthesis.I64_Fork //primitive.i64 _.=/2]
        [#/////synthesis.F64_Fork //primitive.f64 _.=/2]
        [#/////synthesis.Text_Fork //primitive.text _.string=?/2])
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/function.lux
index 58d8b55c6..cfb345097 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/function.lux
@@ -10,7 +10,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor)]]]
     [target
      ["_" scheme (#+ Expression Computation Var)]]]]
   ["." // #_
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/loop.lux
index fb9add0aa..87ddc4929 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/loop.lux
@@ -8,7 +8,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor)]
       ["." set (#+ Set)]]]
     [math
      [number
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux
index 452da33ef..221ee6d88 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux
@@ -367,4 +367,4 @@
          (row.row [(%.nat ..module_id)
                    (|> ..runtime
                        _.code
-                       (\ utf8.codec encode))])])))
+                       (\ utf8.codec encoded))])])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/case.lux
index 1a178900e..d2bf439da 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/case.lux
@@ -11,7 +11,7 @@
      ["." bit ("#\." equivalence)]
      ["." text ("#\." equivalence)]
      [collection
-      ["." list ("#\." functor fold monoid)]
+      ["." list ("#\." functor mix monoid)]
       ["." set (#+ Set)]]]
     [math
      [number
@@ -72,22 +72,22 @@
 
     (#///analysis.Complex (#///analysis.Tuple tuple))
     (let [tuple::last (-- (list.size tuple))]
-      (list\fold (function (_ [tuple::lefts tuple::member] nextC)
-                   (.case tuple::member
-                     (#///analysis.Simple #///analysis.Unit)
-                     nextC
-
-                     _
-                     (let [right? (n.= tuple::last tuple::lefts)
-                           end?' (and end? right?)]
-                       (<| (///\map (|>> (#/.Seq (#/.Access (#/.Member (if right?
-                                                                         (#.Right (-- tuple::lefts))
-                                                                         (#.Left tuple::lefts)))))))
-                           (path' tuple::member end?')
-                           (when> [(new> (not end?') [])] [(///\map ..clean_up)])
-                           nextC))))
-                 thenC
-                 (list.reversed (list.enumeration tuple))))
+      (list\mix (function (_ [tuple::lefts tuple::member] nextC)
+                  (.case tuple::member
+                    (#///analysis.Simple #///analysis.Unit)
+                    nextC
+
+                    _
+                    (let [right? (n.= tuple::last tuple::lefts)
+                          end?' (and end? right?)]
+                      (<| (///\map (|>> (#/.Seq (#/.Access (#/.Member (if right?
+                                                                        (#.Right (-- tuple::lefts))
+                                                                        (#.Left tuple::lefts)))))))
+                          (path' tuple::member end?')
+                          (when> [(new> (not end?') [])] [(///\map ..clean_up)])
+                          nextC))))
+                thenC
+                (list.reversed (list.enumeration tuple))))
     ))
 
 (def: (path archive synthesize pattern bodyA)
@@ -110,7 +110,7 @@
 (def: (weave_fork weave equivalence new_fork old_fork)
   (All [a] (-> (-> Path Path Path) (Equivalence a) (/.Fork a Path) (/.Fork a Path)
                (/.Fork a Path)))
-  (list\fold (..weave_branch weave equivalence) old_fork (#.Item new_fork)))
+  (list\mix (..weave_branch weave equivalence) old_fork (#.Item new_fork)))
 
 (def: (weave new old)
   (-> Path Path Path)
@@ -228,7 +228,7 @@
   (do {! ///.monad}
     [headSP (path archive synthesize headP headA)
      tailSP+ (monad.map ! (product.uncurried (path archive synthesize)) tailPA+)]
-    (in (/.branch/case [input (list\fold weave headSP tailSP+)]))))
+    (in (/.branch/case [input (list\mix weave headSP tailSP+)]))))
 
 (template: (!masking <variable> <output>)
   [[[(#///analysis.Bind <variable>)
@@ -358,11 +358,11 @@
            (#/.Text_Fork forks))
       (|> (#.Item forks)
           (list\map product.right)
-          (list\fold for_path path_storage))
+          (list\mix for_path path_storage))
 
       (^or (^ (/.path/seq left right))
            (^ (/.path/alt left right)))
-      (list\fold for_path path_storage (list left right))
+      (list\mix for_path path_storage (list left right))
 
       (^ (/.path/then bodyS))
       (loop for_synthesis
@@ -373,7 +373,7 @@
           (for_synthesis valueS synthesis_storage)
 
           (^ (/.tuple members))
-          (list\fold for_synthesis synthesis_storage members)
+          (list\mix for_synthesis synthesis_storage members)
 
           (#/.Reference (#///reference.Variable (#///reference/variable.Local register)))
           (if (set.member? (value@ #bindings synthesis_storage) register)
@@ -384,10 +384,10 @@
           (revised@ #dependencies (set.has var) synthesis_storage)
 
           (^ (/.function/apply [functionS argsS]))
-          (list\fold for_synthesis synthesis_storage (#.Item functionS argsS))
+          (list\mix for_synthesis synthesis_storage (#.Item functionS argsS))
 
           (^ (/.function/abstraction [environment arity bodyS]))
-          (list\fold for_synthesis synthesis_storage environment)
+          (list\mix for_synthesis synthesis_storage environment)
 
           (^ (/.branch/case [inputS pathS]))
           (revised@ #dependencies
@@ -403,7 +403,7 @@
                     (for_synthesis inputS synthesis_storage))
 
           (^ (/.branch/if [testS thenS elseS]))
-          (list\fold for_synthesis synthesis_storage (list testS thenS elseS))
+          (list\mix for_synthesis synthesis_storage (list testS thenS elseS))
 
           (^ (/.branch/get [access whole]))
           (for_synthesis whole synthesis_storage)
@@ -417,13 +417,13 @@
                                                                       (set.of_list n.hash))))
                                    (for_synthesis iterationS)
                                    (value@ #dependencies)))
-                    (list\fold for_synthesis synthesis_storage initsS+))
+                    (list\mix for_synthesis synthesis_storage initsS+))
 
           (^ (/.loop/recur replacementsS+))
-          (list\fold for_synthesis synthesis_storage replacementsS+)
+          (list\mix for_synthesis synthesis_storage replacementsS+)
 
           (#/.Extension [extension argsS])
-          (list\fold for_synthesis synthesis_storage argsS)
+          (list\mix for_synthesis synthesis_storage argsS)
 
           _
           synthesis_storage))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/function.lux
index f26b13ade..2aeacc78d 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/function.lux
@@ -12,7 +12,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor monoid fold)]]]
+      ["." list ("#\." functor monoid)]]]
     [math
      [number
       ["n" nat]]]]]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/loop.lux
index 39082e826..bba61a90f 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/loop.lux
@@ -178,22 +178,24 @@
 
       ... TODO: Stop relying on this custom code.
       (^ (#/.Extension ["lux syntax char case!" (list& input else matches)]))
-      (do {! maybe.monad}
-        [input (recur false input)
-         matches (monad.map !
-                            (function (_ match)
-                              (case match
-                                (^ (#/.Structure (#analysis.Tuple (list when then))))
-                                (do !
-                                  [when (recur false when)
-                                   then (recur return? then)]
-                                  (in (#/.Structure (#analysis.Tuple (list when then)))))
-
-                                _
-                                (recur false match)))
-                            matches)
-         else (recur return? else)]
-        (in (#/.Extension ["lux syntax char case!" (list& input else matches)])))
+      (if return?
+        (do {! maybe.monad}
+          [input (recur false input)
+           matches (monad.map !
+                              (function (_ match)
+                                (case match
+                                  (^ (#/.Structure (#analysis.Tuple (list when then))))
+                                  (do !
+                                    [when (recur false when)
+                                     then (recur return? then)]
+                                    (in (#/.Structure (#analysis.Tuple (list when then)))))
+
+                                  _
+                                  (recur false match)))
+                              matches)
+           else (recur return? else)]
+          (in (#/.Extension ["lux syntax char case!" (list& input else matches)])))
+        #.None)
 
       (#/.Extension [name args])
       (|> args
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/variable.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/variable.lux
index cb647c284..88b2d3f1f 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/variable.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/synthesis/variable.lux
@@ -13,7 +13,7 @@
       ["%" format]]
      [collection
       ["." dictionary (#+ Dictionary)]
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." set]]]
     [math
      [number
@@ -181,10 +181,10 @@
   (-> Register Nat Redundancy [(List Register) Redundancy])
   (let [extension (|> amount list.indices (list\map (n.+ offset)))]
     [extension
-     (list\fold (function (_ register redundancy)
-                  (dictionary.has register ..necessary! redundancy))
-                redundancy
-                extension)]))
+     (list\mix (function (_ register redundancy)
+                 (dictionary.has register ..necessary! redundancy))
+               redundancy
+               extension)]))
 
 (def: (default arity)
   (-> Arity Redundancy)
@@ -310,10 +310,10 @@
                                            (and (set.member? bindings register)
                                                 redundant?)))
                               (list\map product.left))]]
-        (in [(list\fold dictionary.lacks redundancy (set.list bindings))
+        (in [(list\mix dictionary.lacks redundancy (set.list bindings))
              (|> redundants
                  (list.sorted n.>)
-                 (list\fold (..remove_local_from_path ..remove_local) (#/.Seq pre post)))]))
+                 (list\mix (..remove_local_from_path ..remove_local) (#/.Seq pre post)))]))
 
       (#/.Then then)
       (do try.monad
@@ -405,7 +405,7 @@
             [[redundancy inits] (..list_optimization optimization' [redundancy inits])
              .let [[extension redundancy] (..extended start (list.size inits) redundancy)]
              [redundancy iteration] (optimization' [redundancy iteration])]
-            (in [(list\fold dictionary.lacks redundancy extension)
+            (in [(list\mix dictionary.lacks redundancy extension)
                  (#/.Control (#/.Loop (#/.Scope [start inits iteration])))]))
           
           (#/.Recur resets)
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/syntax.lux b/stdlib/source/library/lux/tool/compiler/language/lux/syntax.lux
index d4b612bf2..3105f2ad8 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/syntax.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/syntax.lux
@@ -333,7 +333,7 @@
   [(case (|> <source_code>
              (!clip <start> <end>)
              (text.replaced ..digit_separator "")
-             (\ <codec> decode))
+             (\ <codec> decoded))
      (#.Right output)
      (#.Right [[(let [[where::file where::line where::column] where]
                   [where::file where::line (!n/+ (!n/- <start> <end>) where::column)])
diff --git a/stdlib/source/library/lux/tool/compiler/meta/archive.lux b/stdlib/source/library/lux/tool/compiler/meta/archive.lux
index d810d7aca..e1ea19e37 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/archive.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/archive.lux
@@ -20,7 +20,7 @@
      [format
       ["." binary (#+ Writer)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]
       ["." set]
       ["." row (#+ Row)]]]
@@ -198,15 +198,15 @@
           :representation
           (revised@ #next (n.max +next))
           (revised@ #resolver (function (_ resolver)
-                                (list\fold (function (_ [module [id entry]] resolver)
-                                             (case entry
-                                               (#.Some _)
-                                               (dictionary.has module [id entry] resolver)
-                                               
-                                               #.None
-                                               resolver))
-                                           resolver
-                                           (dictionary.entries +resolver))))
+                                (list\mix (function (_ [module [id entry]] resolver)
+                                            (case entry
+                                              (#.Some _)
+                                              (dictionary.has module [id entry] resolver)
+                                              
+                                              #.None
+                                              resolver))
+                                          resolver
+                                          (dictionary.entries +resolver))))
           :abstraction)))
 
   (type: Reservation
@@ -279,8 +279,8 @@
                               (correct_reservations? reservations))]
       (in (:abstraction
            {#next next
-            #resolver (list\fold (function (_ [module id] archive)
-                                   (dictionary.has module [id #.None] archive))
-                                 (value@ #resolver (:representation ..empty))
-                                 reservations)}))))
+            #resolver (list\mix (function (_ [module id] archive)
+                                  (dictionary.has module [id #.None] archive))
+                                (value@ #resolver (:representation ..empty))
+                                reservations)}))))
   )
diff --git a/stdlib/source/library/lux/tool/compiler/meta/archive/artifact.lux b/stdlib/source/library/lux/tool/compiler/meta/archive/artifact.lux
index e4cc633de..af69bbdc9 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/archive/artifact.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/archive/artifact.lux
@@ -14,7 +14,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." list]
-      ["." row (#+ Row) ("#\." functor fold)]
+      ["." row (#+ Row) ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]]
      [format
       ["." binary (#+ Writer)]]]
@@ -145,21 +145,21 @@
                           
                           _ (<>.failure (exception.error ..invalid_category [tag])))))]
       (|> (<binary>.row/64 category)
-          (\ <>.monad map (row\fold (function (_ artifact registry)
-                                      (product.right
-                                       (case artifact
-                                         #Anonymous
-                                         (..resource registry)
-
-                                         (^template [<tag> <create>]
-                                           [(<tag> name)
-                                            (<create> name registry)])
-                                         ([#Definition ..definition]
-                                          [#Analyser ..analyser]
-                                          [#Synthesizer ..synthesizer]
-                                          [#Generator ..generator]
-                                          [#Directive ..directive]
-                                          [#Custom ..custom])
-                                         )))
-                                    ..empty)))))
+          (\ <>.monad map (row\mix (function (_ artifact registry)
+                                     (product.right
+                                      (case artifact
+                                        #Anonymous
+                                        (..resource registry)
+
+                                        (^template [<tag> <create>]
+                                          [(<tag> name)
+                                           (<create> name registry)])
+                                        ([#Definition ..definition]
+                                         [#Analyser ..analyser]
+                                         [#Synthesizer ..synthesizer]
+                                         [#Generator ..generator]
+                                         [#Directive ..directive]
+                                         [#Custom ..custom])
+                                        )))
+                                   ..empty)))))
   )
diff --git a/stdlib/source/library/lux/tool/compiler/meta/cache/dependency.lux b/stdlib/source/library/lux/tool/compiler/meta/cache/dependency.lux
index 6ee936f42..e2a3ef238 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/cache/dependency.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/cache/dependency.lux
@@ -13,7 +13,7 @@
      ["." text
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]
       ["." set (#+ Set)]]]]]
   [///
@@ -46,9 +46,9 @@
 
 (def: .public graph
   (-> (List Dependency) Graph)
-  (list\fold (function (_ [module imports] graph)
-               (dictionary.has module imports graph))
-             ..empty))
+  (list\mix (function (_ [module imports] graph)
+              (dictionary.has module imports graph))
+            ..empty))
 
 (def: (ancestry archive)
   (-> Archive Graph)
@@ -62,15 +62,15 @@
                                      (#try.Failure error)
                                      ..fresh)]
                      ancestors (monad.map ! recur (set.list parents))]
-                    (in (list\fold set.union parents ancestors)))))
+                    (in (list\mix set.union parents ancestors)))))
         ancestry (memo.open memo)]
-    (list\fold (function (_ module memory)
-                 (if (dictionary.key? memory module)
-                   memory
-                   (let [[memory _] (ancestry [memory module])]
-                     memory)))
-               ..empty
-               (archive.archived archive))))
+    (list\mix (function (_ module memory)
+                (if (dictionary.key? memory module)
+                  memory
+                  (let [[memory _] (ancestry [memory module])]
+                    memory)))
+              ..empty
+              (archive.archived archive))))
 
 (def: (dependency? ancestry target source)
   (-> Graph Module Module Bit)
diff --git a/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux b/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
index b4fa30d12..45f489e8b 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
@@ -19,7 +19,7 @@
      ["." text ("#\." equivalence)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]
       ["." row (#+ Row)]
       ["." set]]]
@@ -384,19 +384,19 @@
   (-> (List [Bit [Module [archive.ID [Descriptor (Document .Module)]]]])
       dependency.Order
       Purge)
-  (list\fold (function (_ [module_name [module_id [descriptor document]]] purge)
-               (let [purged? (: (Predicate Module)
-                                (dictionary.key? purge))]
-                 (if (purged? module_name)
-                   purge
-                   (if (|> descriptor
-                           (value@ #descriptor.references)
-                           set.list
-                           (list.any? purged?))
-                     (dictionary.has module_name module_id purge)
-                     purge))))
-             (..initial_purge caches)
-             load_order))
+  (list\mix (function (_ [module_name [module_id [descriptor document]]] purge)
+              (let [purged? (: (Predicate Module)
+                               (dictionary.key? purge))]
+                (if (purged? module_name)
+                  purge
+                  (if (|> descriptor
+                          (value@ #descriptor.references)
+                          set.list
+                          (list.any? purged?))
+                    (dictionary.has module_name module_id purge)
+                    purge))))
+            (..initial_purge caches)
+            load_order))
 
 (def: pseudo_module
   Text
@@ -422,10 +422,10 @@
                                                      [module_name [module_id [descriptor document]]]])))))))
      load_order (|> pre_loaded_caches
                     (list\map product.right)
-                    (monad.fold try.monad
-                                (function (_ [module [module_id [descriptor document]]] archive)
-                                  (archive.has module [descriptor document (: Output row.empty)] archive))
-                                archive)
+                    (monad.mix try.monad
+                               (function (_ [module [module_id [descriptor document]]] archive)
+                                 (archive.has module [descriptor document (: Output row.empty)] archive))
+                               archive)
                     (\ try.monad map (dependency.load_order $.key))
                     (\ try.monad join)
                     async\in)
@@ -442,22 +442,22 @@
                                              bundles])))))]
     (async\in
      (do {! try.monad}
-       [archive (monad.fold !
-                            (function (_ [[module descriptor,document,output] _bundle] archive)
-                              (archive.has module descriptor,document,output archive))
-                            archive
-                            loaded_caches)
+       [archive (monad.mix !
+                           (function (_ [[module descriptor,document,output] _bundle] archive)
+                             (archive.has module descriptor,document,output archive))
+                           archive
+                           loaded_caches)
         analysis_state (..analysis_state (value@ #static.host static) archive)]
        (in [archive
             analysis_state
-            (list\fold (function (_ [_ [+analysers +synthesizers +generators +directives]]
-                                    [analysers synthesizers generators directives])
-                         [(dictionary.merged +analysers analysers)
-                          (dictionary.merged +synthesizers synthesizers)
-                          (dictionary.merged +generators generators)
-                          (dictionary.merged +directives directives)])
-                       ..empty_bundles
-                       loaded_caches)])))))
+            (list\mix (function (_ [_ [+analysers +synthesizers +generators +directives]]
+                                   [analysers synthesizers generators directives])
+                        [(dictionary.merged +analysers analysers)
+                         (dictionary.merged +synthesizers synthesizers)
+                         (dictionary.merged +generators generators)
+                         (dictionary.merged +directives directives)])
+                      ..empty_bundles
+                      loaded_caches)])))))
 
 (def: .public (thaw host_environment fs static import contexts)
   (All [expression directive]
diff --git a/stdlib/source/library/lux/tool/compiler/meta/io/context.lux b/stdlib/source/library/lux/tool/compiler/meta/io/context.lux
index 979edaa76..74d5aab33 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/io/context.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/io/context.lux
@@ -127,7 +127,7 @@
       (Async (Try Input)))
   (do (try.with async.monad)
     [[path binary] (..find_any_source_file fs importer import contexts partial_host_extension module)]
-    (case (\ utf8.codec decode binary)
+    (case (\ utf8.codec decoded binary)
       (#try.Success code)
       (in {#////.module module
            #////.file path
@@ -145,17 +145,17 @@
   (do {! (try.with async.monad)}
     [enumeration (|> directory
                      (\ fs directory_files)
-                     (\ ! map (monad.fold ! (function (_ file enumeration)
-                                              (if (text.ends_with? ..lux_extension file)
-                                                (do !
-                                                  [source_code (\ fs read file)]
-                                                  (async\in (dictionary.has' (text.replaced context "" file) source_code enumeration)))
-                                                (in enumeration)))
-                                          enumeration))
+                     (\ ! map (monad.mix ! (function (_ file enumeration)
+                                             (if (text.ends_with? ..lux_extension file)
+                                               (do !
+                                                 [source_code (\ fs read file)]
+                                                 (async\in (dictionary.has' (text.replaced context "" file) source_code enumeration)))
+                                               (in enumeration)))
+                                         enumeration))
                      (\ ! join))]
     (|> directory
         (\ fs sub_directories)
-        (\ ! map (monad.fold ! (context_listing fs context) enumeration))
+        (\ ! map (monad.mix ! (context_listing fs context) enumeration))
         (\ ! join))))
 
 (def: Action
@@ -175,14 +175,14 @@
   (-> (file.System Async) (List Context) (Action Enumeration))
   (let [! (: (Monad Action)
              (try.with async.monad))]
-    (monad.fold !
-                (function (_ context enumeration)
-                  (do !
-                    [context (..canonical fs context)]
-                    (..context_listing fs
-                                       (format context (\ fs separator))
-                                       context
-                                       enumeration)))
-                (: Enumeration
-                   (dictionary.empty text.hash))
-                contexts)))
+    (monad.mix !
+               (function (_ context enumeration)
+                 (do !
+                   [context (..canonical fs context)]
+                   (..context_listing fs
+                                      (format context (\ fs separator))
+                                      context
+                                      enumeration)))
+               (: Enumeration
+                  (dictionary.empty text.hash))
+               contexts)))
diff --git a/stdlib/source/library/lux/tool/compiler/meta/packager/jvm.lux b/stdlib/source/library/lux/tool/compiler/meta/packager/jvm.lux
index d9707b0c0..ffee37de6 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/packager/jvm.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/packager/jvm.lux
@@ -154,11 +154,11 @@
 (def: (write_module static [module output] sink)
   (-> Static [archive.ID Output] java/util/jar/JarOutputStream
       (Try java/util/jar/JarOutputStream))
-  (monad.fold try.monad
-              (function (_ [artifact custom content] sink)
-                (..write_class static module artifact custom content sink))
-              sink
-              (row.list output)))
+  (monad.mix try.monad
+             (function (_ [artifact custom content] sink)
+               (..write_class static module artifact custom content sink))
+             sink
+             (row.list output)))
 
 (def: (read_jar_entry_with_unknown_size input)
   (-> java/util/jar/JarInputStream [Nat Binary])
@@ -251,14 +251,14 @@
        sink (|> order
                 (list\map (function (_ [module [module_id [descriptor document output]]])
                             [module_id output]))
-                (monad.fold ! (..write_module static)
-                            (java/util/jar/JarOutputStream::new buffer (..manifest program))))
+                (monad.mix ! (..write_module static)
+                           (java/util/jar/JarOutputStream::new buffer (..manifest program))))
        [entries duplicates sink] (|> host_dependencies
                                      dictionary.values
-                                     (monad.fold ! ..write_host_dependency
-                                                 [(set.empty text.hash)
-                                                  (set.empty text.hash)
-                                                  sink]))
+                                     (monad.mix ! ..write_host_dependency
+                                                [(set.empty text.hash)
+                                                 (set.empty text.hash)
+                                                 sink]))
        .let [_ (do_to sink
                  (java/io/Flushable::flush)
                  (java/io/Closeable::close))]]
diff --git a/stdlib/source/library/lux/tool/compiler/meta/packager/scheme.lux b/stdlib/source/library/lux/tool/compiler/meta/packager/scheme.lux
index a229c78a1..f888e6975 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/packager/scheme.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/packager/scheme.lux
@@ -14,7 +14,7 @@
       ["." encoding]]
      [collection
       ["." row]
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]
       ["." set]]
      [format
@@ -58,19 +58,19 @@
   (-> Output (Try _.Expression))
   (|>> row.list
        (list\map product.right)
-       (monad.fold try.monad
-                   (function (_ content so_far)
-                     (|> content
-                         (\ encoding.utf8 decode)
-                         (\ try.monad map
-                            (|>> :expected
-                                 (:sharing [directive]
-                                           directive
-                                           so_far
-                                           
-                                           directive)
-                                 (..then so_far)))))
-                   (: _.Expression (_.manual "")))))
+       (monad.mix try.monad
+                  (function (_ content so_far)
+                    (|> content
+                        (\ encoding.utf8 decoded)
+                        (\ try.monad map
+                           (|>> :expected
+                                (:sharing [directive]
+                                          directive
+                                          so_far
+                                          
+                                          directive)
+                                (..then so_far)))))
+                  (: _.Expression (_.manual "")))))
 
 (def: module_file
   (-> archive.ID file.Path)
@@ -108,10 +108,10 @@
                           set.list
                           (list.all (function (_ module) (dictionary.value module mapping)))
                           (list\map (|>> ..module_file _.string _.load_relative/1))
-                          (list\fold ..then bundle)
+                          (list\mix ..then bundle)
                           (: _.Expression)
                           _.code
-                          (\ encoding.utf8 encode)
+                          (\ encoding.utf8 encoded)
                           tar.content))
      module_file (tar.path (..module_file module_id))]
     (in (#tar.Normal [module_file now ..mode ..ownership entry_content]))))
diff --git a/stdlib/source/library/lux/tool/compiler/meta/packager/script.lux b/stdlib/source/library/lux/tool/compiler/meta/packager/script.lux
index fd6437557..9b49232e3 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/packager/script.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/packager/script.lux
@@ -40,19 +40,19 @@
   (|> output
       row.list
       (list\map (|>> product.right product.right))
-      (monad.fold try.monad
-                  (function (_ content so_far)
-                    (|> content
-                        (\ utf8.codec decode)
-                        (\ try.monad map
-                           (|>> :expected
-                                (:sharing [directive]
-                                          directive
-                                          so_far
-                                          
-                                          directive)
-                                (sequence so_far)))))
-                  so_far)))
+      (monad.mix try.monad
+                 (function (_ content so_far)
+                   (|> content
+                       (\ utf8.codec decoded)
+                       (\ try.monad map
+                          (|>> :expected
+                               (:sharing [directive]
+                                         directive
+                                         so_far
+                                         
+                                         directive)
+                               (sequence so_far)))))
+                 so_far)))
 
 (def: .public (package header code sequence scope)
   (All [directive]
@@ -67,5 +67,5 @@
       (|> order
           (list\map (function (_ [module [module_id [descriptor document output]]])
                       [module_id output]))
-          (monad.fold ! (..write_module sequence) header)
-          (\ ! map (|>> scope code (\ utf8.codec encode)))))))
+          (monad.mix ! (..write_module sequence) header)
+          (\ ! map (|>> scope code (\ utf8.codec encoded)))))))
diff --git a/stdlib/source/library/lux/type.lux b/stdlib/source/library/lux/type.lux
index 2a99dded3..e1e42c28c 100644
--- a/stdlib/source/library/lux/type.lux
+++ b/stdlib/source/library/lux/type.lux
@@ -18,7 +18,7 @@
      ["." name ("#\." equivalence codec)]
      [collection
       ["." array]
-      ["." list ("#\." functor monoid fold)]]]
+      ["." list ("#\." functor monoid mix)]]]
     ["." macro
      [syntax (#+ syntax:)]
      ["." code]]
@@ -92,7 +92,7 @@
         (text.enclosed' text.double_quote name)
         (|> params
             (list\map (|>> format (text\compose " ")))
-            (list\fold (function.flipped text\compose) ""))
+            (list\mix (function.flipped text\compose) ""))
         ")")
 
     (^template [<tag> <open> <close> <flat>]
@@ -102,7 +102,7 @@
                (list\map format)
                list.reversed
                (list.interposed " ")
-               (list\fold text\compose ""))
+               (list\mix text\compose ""))
            <close>)])
     ([#.Sum  "(Or " ")" flat_variant]
      [#.Product "["   "]" flat_tuple])
@@ -114,21 +114,21 @@
               (list\map format)
               list.reversed
               (list.interposed " ")
-              (list\fold text\compose ""))
+              (list\mix text\compose ""))
           " " (format out) ")"))
 
     (#.Parameter idx)
-    (n\encode idx)
+    (n\encoded idx)
 
     (#.Var id)
-    ($_ text\compose "⌈v:" (n\encode id) "⌋")
+    ($_ text\compose "⌈v:" (n\encoded id) "⌋")
 
     (#.Ex id)
-    ($_ text\compose "⟨e:" (n\encode id) "⟩")
+    ($_ text\compose "⟨e:" (n\encoded id) "⟩")
 
     (#.Apply param fun)
     (let [[type_func type_args] (flat_application type)]
-      ($_ text\compose  "(" (format type_func) " " (|> type_args (list\map format) list.reversed (list.interposed " ") (list\fold text\compose "")) ")"))
+      ($_ text\compose  "(" (format type_func) " " (|> type_args (list\map format) list.reversed (list.interposed " ") (list\mix text\compose "")) ")"))
 
     (^template [<tag> <desc>]
       [(<tag> env body)
@@ -167,12 +167,12 @@
     (#.Parameter idx)
     (maybe.else (panic! ($_ text\compose
                             "Unknown type parameter" text.new_line
-                            "      Index: " (n\encode idx) text.new_line
+                            "      Index: " (n\encoded idx) text.new_line
                             "Environment: " (|> env
                                                 list.enumeration
                                                 (list\map (.function (_ [index type])
                                                             ($_ text\compose
-                                                                (n\encode index)
+                                                                (n\encoded index)
                                                                 " " (..format type))))
                                                 (text.interposed (text\compose text.new_line "             ")))))
                 (list.item idx env))
@@ -191,9 +191,9 @@
           [(#.Primitive xname xparams) (#.Primitive yname yparams)]
           (and (text\= xname yname)
                (n.= (list.size yparams) (list.size xparams))
-               (list\fold (.function (_ [x y] prev) (and prev (= x y)))
-                          #1
-                          (list.zipped/2 xparams yparams)))
+               (list\mix (.function (_ [x y] prev) (and prev (= x y)))
+                         #1
+                         (list.zipped/2 xparams yparams)))
 
           (^template [<tag>]
             [[(<tag> xid) (<tag> yid)]
@@ -218,9 +218,9 @@
                [(#.ExQ xenv xbody) (#.ExQ yenv ybody)])
           (and (n.= (list.size yenv) (list.size xenv))
                (= xbody ybody)
-               (list\fold (.function (_ [x y] prev) (and prev (= x y)))
-                          #1
-                          (list.zipped/2 xenv yenv)))
+               (list\mix (.function (_ [x y] prev) (and prev (= x y)))
+                         #1
+                         (list.zipped/2 xenv yenv)))
 
           _
           #0
@@ -421,13 +421,13 @@
        valueT (meta.type valueN)
        .let [_ ("lux io log"
                 ($_ text\compose
-                    (name\encode (name_of ..:log!)) " " (location.format location) text.new_line
+                    (name\encoded (name_of ..:log!)) " " (location.format location) text.new_line
                     "Expression: " (case valueC
                                      (#.Some valueC)
                                      (code.format valueC)
                                      
                                      #.None
-                                     (name\encode valueN))
+                                     (name\encoded valueN))
                     text.new_line
                     "      Type: " (..format valueT)))]]
       (in (list (code.identifier valueN))))
diff --git a/stdlib/source/library/lux/type/abstract.lux b/stdlib/source/library/lux/type/abstract.lux
index 9b657cb19..57d9ae3ab 100644
--- a/stdlib/source/library/lux/type/abstract.lux
+++ b/stdlib/source/library/lux/type/abstract.lux
@@ -194,15 +194,15 @@
 
 (def: abstraction_type_name
   (-> Name Text)
-  (|>> name\encode
+  (|>> name\encoded
        ($_ text\compose
-           (name\encode (name_of #..Abstraction))
+           (name\encoded (name_of #..Abstraction))
            " ")))
 
 (def: representation_definition_name
   (-> Text Text)
   (|>> ($_ text\compose
-           (name\encode (name_of #..Representation))
+           (name\encoded (name_of #..Representation))
            " ")))
 
 (def: declaration
diff --git a/stdlib/source/library/lux/type/check.lux b/stdlib/source/library/lux/type/check.lux
index aa8e213af..3e6f6a8c4 100644
--- a/stdlib/source/library/lux/type/check.lux
+++ b/stdlib/source/library/lux/type/check.lux
@@ -30,11 +30,11 @@
 
 (exception: .public (unknown_type_var {id Nat})
   (exception.report
-   ["ID" (n\encode id)]))
+   ["ID" (n\encoded id)]))
 
 (exception: .public (unbound_type_var {id Nat})
   (exception.report
-   ["ID" (n\encode id)]))
+   ["ID" (n\encoded id)]))
 
 (exception: .public (invalid_type_application {funcT Type} {argT Type})
   (exception.report
@@ -43,7 +43,7 @@
 
 (exception: .public (cannot_rebind_var {id Nat} {type Type} {bound Type})
   (exception.report
-   ["Var" (n\encode id)]
+   ["Var" (n\encoded id)]
    ["Wanted Type" (//.format type)]
    ["Current Type" (//.format bound)]))
 
@@ -86,7 +86,7 @@
   
   (def: &functor ..functor)
 
-  (def: (apply ff fa)
+  (def: (on fa ff)
     (function (_ context)
       (case (ff context)
         (#try.Success [context' f])
@@ -441,12 +441,12 @@
               (in assumptions)
               ... Fuse 2 rings
               (do !
-                [_ (monad.fold ! (function (_ interpose to)
-                                   (do !
-                                     [_ (link/3 interpose to idE)]
-                                     (in interpose)))
-                               targetE
-                               (set.list ringA))]
+                [_ (monad.mix ! (function (_ interpose to)
+                                  (do !
+                                    [_ (link/3 interpose to idE)]
+                                    (in interpose)))
+                              targetE
+                              (set.list ringA))]
                 (in assumptions))))
 
           (^template [<pattern> <id> <type>]
diff --git a/stdlib/source/library/lux/type/implicit.lux b/stdlib/source/library/lux/type/implicit.lux
index cc54a82a1..8af389efc 100644
--- a/stdlib/source/library/lux/type/implicit.lux
+++ b/stdlib/source/library/lux/type/implicit.lux
@@ -14,7 +14,7 @@
      ["." text ("#\." equivalence)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." monad fold)]
+      ["." list ("#\." monad mix)]
       ["." dictionary (#+ Dictionary)]]]
     ["." macro
      ["." code]
@@ -119,24 +119,24 @@
 
 (def: (available_definitions source_module target_module constants aggregate)
   (-> Text Text (List [Text Definition]) (-> (List [Name Type]) (List [Name Type])))
-  (list\fold (function (_ [name [exported? def_type def_anns def_value]] aggregate)
-               (if (and (annotation.implementation? def_anns)
-                        (or (text\= target_module source_module)
-                            exported?))
-                 (#.Item [[source_module name] def_type] aggregate)
-                 aggregate))
-             aggregate
-             constants))
+  (list\mix (function (_ [name [exported? def_type def_anns def_value]] aggregate)
+              (if (and (annotation.implementation? def_anns)
+                       (or (text\= target_module source_module)
+                           exported?))
+                (#.Item [[source_module name] def_type] aggregate)
+                aggregate))
+            aggregate
+            constants))
 
 (def: local_env
   (Meta (List [Name Type]))
   (do meta.monad
     [local_batches meta.locals
-     .let [total_locals (list\fold (function (_ [name type] table)
-                                     (try.else table (dictionary.has' name type table)))
-                                   (: (Dictionary Text Type)
-                                      (dictionary.empty text.hash))
-                                   (list\join local_batches))]]
+     .let [total_locals (list\mix (function (_ [name type] table)
+                                    (try.else table (dictionary.has' name type table)))
+                                  (: (Dictionary Text Type)
+                                     (dictionary.empty text.hash))
+                                  (list\join local_batches))]]
     (in (|> total_locals
             dictionary.entries
             (list\map (function (_ [name type]) [["" name] type]))))))
@@ -154,10 +154,10 @@
     [this_module_name meta.current_module_name
      imported_modules (meta.imported_modules this_module_name)
      accessible_definitions (monad.map ! meta.definitions imported_modules)]
-    (in (list\fold (function (_ [imported_module definitions] tail)
-                     (available_definitions imported_module this_module_name definitions tail))
-                   #.End
-                   (list.zipped/2 imported_modules accessible_definitions)))))
+    (in (list\mix (function (_ [imported_module definitions] tail)
+                    (available_definitions imported_module this_module_name definitions tail))
+                  #.End
+                  (list.zipped/2 imported_modules accessible_definitions)))))
 
 (def: (on_argument arg func)
   (-> Type Type (Check Type))
@@ -197,7 +197,7 @@
 (def: (ensure_function_application! member_type input_types expected_output)
   (-> Type (List Type) Type (Check []))
   (do check.monad
-    [actual_output (monad.fold check.monad ..on_argument member_type input_types)]
+    [actual_output (monad.mix check.monad ..on_argument member_type input_types)]
     (check.check expected_output actual_output)))
 
 (type: #rec Instance
diff --git a/stdlib/source/library/lux/type/poly.lux b/stdlib/source/library/lux/type/poly.lux
index 51f0b7618..8fba22756 100644
--- a/stdlib/source/library/lux/type/poly.lux
+++ b/stdlib/source/library/lux/type/poly.lux
@@ -14,7 +14,7 @@
      ["." product]
      ["." text]
      [collection
-      ["." list ("#\." fold functor)]
+      ["." list ("#\." functor)]
       ["." dictionary]]]
     [macro (#+ with_identifiers)
      ["." code]
diff --git a/stdlib/source/library/lux/type/resource.lux b/stdlib/source/library/lux/type/resource.lux
index fee4aaf79..3e37d8b30 100644
--- a/stdlib/source/library/lux/type/resource.lux
+++ b/stdlib/source/library/lux/type/resource.lux
@@ -16,7 +16,7 @@
      [collection
       ["." set]
       ["." row (#+ Row)]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     ["." macro
      [syntax (#+ syntax:)]]
     [math
@@ -165,15 +165,15 @@
 
       (#.Item head tail)
       (do {! meta.monad}
-        [.let [max_idx (list\fold n.max head tail)]
+        [.let [max_idx (list\mix n.max head tail)]
          g!inputs (<| (monad.all !) (list.repeated (++ max_idx)) (macro.identifier "input"))
-         .let [g!outputs (|> (monad.fold maybe.monad
-                                         (function (_ from to)
-                                           (do maybe.monad
-                                             [input (list.item from g!inputs)]
-                                             (in (row.suffix input to))))
-                                         (: (Row Code) row.empty)
-                                         swaps)
+         .let [g!outputs (|> (monad.mix maybe.monad
+                                        (function (_ from to)
+                                          (do maybe.monad
+                                            [input (list.item from g!inputs)]
+                                            (in (row.suffix input to))))
+                                        (: (Row Code) row.empty)
+                                        swaps)
                              maybe.trusted
                              row.list)
                g!inputsT+ (list\map (|>> (~) (..Key ..Commutative) (`)) g!inputs)
diff --git a/stdlib/source/library/lux/world/file/watch.lux b/stdlib/source/library/lux/world/file/watch.lux
index 0e5deec4a..1625f79ef 100644
--- a/stdlib/source/library/lux/world/file/watch.lux
+++ b/stdlib/source/library/lux/world/file/watch.lux
@@ -20,7 +20,7 @@
       ["%" format (#+ format)]]
      [collection
       ["." dictionary (#+ Dictionary)]
-      ["." list ("#\." functor monoid fold)]
+      ["." list ("#\." functor monoid mix)]
       ["." set]
       ["." array]]]
     [math
@@ -35,43 +35,43 @@
 (abstract: .public Concern
   {#.doc (example "A particular concern to watch-out for.")}
 
-  {#create Bit
-   #modify Bit
-   #delete Bit}
+  {#creation Bit
+   #modification Bit
+   #deletion Bit}
 
   (def: none
     Concern
     (:abstraction
-     {#create false
-      #modify false
-      #delete false}))
+     {#creation false
+      #modification false
+      #deletion false}))
 
   (template [<concern> <predicate> <event> <create> <modify> <delete>]
     [(def: .public <concern>
        Concern
        (:abstraction
-        {#create <create>
-         #modify <modify>
-         #delete <delete>}))
+        {#creation <create>
+         #modification <modify>
+         #deletion <delete>}))
 
      (def: .public <predicate>
        (Predicate Concern)
        (|>> :representation (value@ <event>)))]
 
-    [creation creation? #create
+    [creation creation? #creation
      true false false]
-    [modification modification? #modify
+    [modification modification? #modification
      false true false]
-    [deletion deletion? #delete
+    [deletion deletion? #deletion
      false false true]
     )
 
   (def: .public (also left right)
     (-> Concern Concern Concern)
     (:abstraction
-     {#create (or (..creation? left) (..creation? right))
-      #modify (or (..modification? left) (..modification? right))
-      #delete (or (..deletion? left) (..deletion? right))}))
+     {#creation (or (..creation? left) (..creation? right))
+      #modification (or (..modification? left) (..modification? right))
+      #deletion (or (..deletion? left) (..deletion? right))}))
 
   (def: .public all
     Concern
@@ -126,14 +126,14 @@
   (-> (//.System Async) //.Path (Async (Try File_Tracker)))
   (do {! (try.with async.monad)}
     [files (\ fs directory_files directory)]
-    (monad.fold !
-                (function (_ file tracker)
-                  (do !
-                    [last_modified (\ fs last_modified file)]
-                    (in (dictionary.has file last_modified tracker))))
-                (: File_Tracker
-                   (dictionary.empty text.hash))
-                files)))
+    (monad.mix !
+               (function (_ file tracker)
+                 (do !
+                   [last_modified (\ fs last_modified file)]
+                   (in (dictionary.has file last_modified tracker))))
+               (: File_Tracker
+                  (dictionary.empty text.hash))
+               files)))
 
 (def: (available_files fs directory)
   (-> (//.System Async) //.Path (Async (Try (List [//.Path Instant]))))
@@ -172,15 +172,15 @@
                                    current_files)]]
     (in [[directory
           [concern
-           (let [with_deletions (list\fold dictionary.lacks file_tracker deletions)
-                 with_creations (list\fold (function (_ [path last_modified] tracker)
-                                             (dictionary.has path last_modified tracker))
-                                           with_deletions
-                                           creations)
-                 with_modifications (list\fold (function (_ [path previous_modification current_modification] tracker)
-                                                 (dictionary.has path current_modification tracker))
-                                               with_creations
-                                               modifications)]
+           (let [with_deletions (list\mix dictionary.lacks file_tracker deletions)
+                 with_creations (list\mix (function (_ [path last_modified] tracker)
+                                            (dictionary.has path last_modified tracker))
+                                          with_deletions
+                                          creations)
+                 with_modifications (list\mix (function (_ [path previous_modification current_modification] tracker)
+                                                (dictionary.has path current_modification tracker))
+                                              with_creations
+                                              modifications)]
              with_modifications)]]
          [creations
           modifications
@@ -243,13 +243,13 @@
                                            tracker))]
                 (in (#try.Success [])))
             .let [[creations modifications deletions]
-                  (list\fold (function (_ [_ [creations modifications deletions]]
-                                          [all_creations all_modifications all_deletions])
-                               [(list\compose creations all_creations)
-                                (list\compose modifications all_modifications)
-                                (list\compose deletions all_deletions)])
-                             [(list) (list) (list)]
-                             changes)]]
+                  (list\mix (function (_ [_ [creations modifications deletions]]
+                                         [all_creations all_modifications all_deletions])
+                              [(list\compose creations all_creations)
+                               (list\compose modifications all_modifications)
+                               (list\compose deletions all_deletions)])
+                            [(list) (list) (list)]
+                            changes)]]
            (in ($_ list\compose
                    (list\map (|>> product.left [..creation]) creations)
                    (|> modifications
@@ -340,7 +340,7 @@
                                  (|>> java/nio/file/WatchKey::pollEvents
                                       (\ io.monad map (|>> ..default_list
                                                            (list\map default_event_concern)
-                                                           (list\fold ..also ..none)))))
+                                                           (list\mix ..also ..none)))))
 
                                (import: java/nio/file/WatchService
                                  ["#::."
@@ -364,11 +364,11 @@
 
                                (def: (default_start watch_events watcher path)
                                  (-> (List Watch_Event) java/nio/file/WatchService //.Path (Async (Try java/nio/file/WatchKey)))
-                                 (let [watch_events' (list\fold (function (_ [index watch_event] watch_events')
-                                                                  (ffi.write! index watch_event watch_events'))
-                                                                (ffi.array (java/nio/file/WatchEvent$Kind java/lang/Object)
-                                                                           (list.size watch_events))
-                                                                (list.enumeration watch_events))]
+                                 (let [watch_events' (list\mix (function (_ [index watch_event] watch_events')
+                                                                 (ffi.write! index watch_event watch_events'))
+                                                               (ffi.array (java/nio/file/WatchEvent$Kind java/lang/Object)
+                                                                          (list.size watch_events))
+                                                               (list.enumeration watch_events))]
                                    (async.future
                                     (java/nio/file/Path::register watcher
                                                                   watch_events'
diff --git a/stdlib/source/library/lux/world/net/http/request.lux b/stdlib/source/library/lux/world/net/http/request.lux
index 5b0a254e4..30adaea99 100644
--- a/stdlib/source/library/lux/world/net/http/request.lux
+++ b/stdlib/source/library/lux/world/net/http/request.lux
@@ -20,7 +20,7 @@
       ["." json (#+ JSON)]
       ["." context (#+ Context Property)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary]]]
     [world
      ["." binary (#+ Binary)]]]]
@@ -32,23 +32,23 @@
 (def: (merge inputs)
   (-> (List Binary) Binary)
   (let [[_ output] (try.trusted
-                    (monad.fold try.monad
-                                (function (_ input [offset output])
-                                  (let [amount (binary.size input)]
-                                    (\ try.functor map (|>> [(n.+ amount offset)])
-                                       (binary.copy amount 0 input offset output))))
-                                [0 (|> inputs
-                                       (list\map binary.size)
-                                       (list\fold n.+ 0)
-                                       binary.empty)]
-                                inputs))]
+                    (monad.mix try.monad
+                               (function (_ input [offset output])
+                                 (let [amount (binary.size input)]
+                                   (\ try.functor map (|>> [(n.+ amount offset)])
+                                      (binary.copy amount 0 input offset output))))
+                               [0 (|> inputs
+                                      (list\map binary.size)
+                                      (list\mix n.+ 0)
+                                      binary.empty)]
+                               inputs))]
     output))
 
 (def: (read_text_body body)
   (-> Body (Async (Try Text)))
   (do async.monad
     [blobs (frp.list body)]
-    (in (\ encoding.utf8 decode (merge blobs)))))
+    (in (\ encoding.utf8 decoded (merge blobs)))))
 
 (def: failure (//response.bad_request ""))
 
@@ -59,7 +59,7 @@
       [?raw (read_text_body (value@ #//.body message))]
       (case (do try.monad
               [raw ?raw
-               content (\ json.codec decode raw)]
+               content (\ json.codec decoded raw)]
               (json.result content reader))
         (#try.Success input)
         (server input request)
diff --git a/stdlib/source/library/lux/world/net/http/response.lux b/stdlib/source/library/lux/world/net/http/response.lux
index b49715c4d..b129584d5 100644
--- a/stdlib/source/library/lux/world/net/http/response.lux
+++ b/stdlib/source/library/lux/world/net/http/response.lux
@@ -29,7 +29,7 @@
 
 (def: .public empty
   (-> Status Response)
-  (let [body (frp\in (\ encoding.utf8 encode ""))]
+  (let [body (frp\in (\ encoding.utf8 encoded ""))]
     (function (_ status)
       [status
        {#//.headers (|> context.empty
@@ -56,7 +56,7 @@
 
 (def: .public bad_request
   (-> Text Response)
-  (|>> (\ encoding.utf8 encode) (content status.bad_request mime.utf_8)))
+  (|>> (\ encoding.utf8 encoded) (content status.bad_request mime.utf_8)))
 
 (def: .public ok
   (-> MIME Binary Response)
@@ -65,10 +65,10 @@
 (template [<name> <type> <mime> <pre>]
   [(def: .public <name>
      (-> <type> Response)
-     (|>> <pre> (\ encoding.utf8 encode) (..ok <mime>)))]
+     (|>> <pre> (\ encoding.utf8 encoded) (..ok <mime>)))]
 
   [text Text          mime.utf_8 (<|)]
   [html html.Document mime.html  html.html]
   [css  CSS           mime.css   css.css]
-  [json JSON          mime.json  json\encode]
+  [json JSON          mime.json  json\encoded]
   )
diff --git a/stdlib/source/library/lux/world/shell.lux b/stdlib/source/library/lux/world/shell.lux
index d59b72786..a86f33a67 100644
--- a/stdlib/source/library/lux/world/shell.lux
+++ b/stdlib/source/library/lux/world/shell.lux
@@ -25,7 +25,7 @@
        ["." utf8]]]
      [collection
       ["." array (#+ Array)]
-      ["." list ("#\." fold functor)]
+      ["." list ("#\." mix functor)]
       ["." dictionary]]]
     [math
      [number (#+ hex)
@@ -181,12 +181,12 @@
                                (def: (jvm::arguments_array arguments)
                                  (-> (List Argument) (Array java/lang/String))
                                  (product.right
-                                  (list\fold (function (_ argument [idx output])
-                                               [(++ idx) (jvm.write! idx
-                                                                     (:as java/lang/String argument)
-                                                                     output)])
-                                             [0 (jvm.array java/lang/String (list.size arguments))]
-                                             arguments)))
+                                  (list\mix (function (_ argument [idx output])
+                                              [(++ idx) (jvm.write! idx
+                                                                    (:as java/lang/String argument)
+                                                                    output)])
+                                            [0 (jvm.array java/lang/String (list.size arguments))]
+                                            arguments)))
 
                                (import: (java/util/Map k v)
                                  ["#::."
@@ -196,14 +196,14 @@
                                  (-> Environment
                                      (java/util/Map java/lang/String java/lang/String)
                                      (java/util/Map java/lang/String java/lang/String))
-                                 (list\fold (function (_ [key value] target')
-                                              (exec
-                                                (java/util/Map::put (:as java/lang/String key)
-                                                                    (:as java/lang/String value)
-                                                                    target')
-                                                target'))
-                                            target
-                                            (dictionary.entries input)))
+                                 (list\mix (function (_ [key value] target')
+                                             (exec
+                                               (java/util/Map::put (:as java/lang/String key)
+                                                                   (:as java/lang/String value)
+                                                                   target')
+                                               target'))
+                                           target
+                                           (dictionary.entries input)))
                                
                                (import: java/io/Reader
                                  ["#::."
@@ -263,7 +263,7 @@
                                                      [error jvm_error]
                                                      ))
                                                (def: (write message)
-                                                 (java/io/OutputStream::write (\ utf8.codec encode message) jvm_output))
+                                                 (java/io/OutputStream::write (\ utf8.codec encoded message) jvm_output))
                                                (~~ (template [<name> <method>]
                                                      [(def: (<name> _)
                                                         (<method> process))]
diff --git a/stdlib/source/poly/lux/abstract/equivalence.lux b/stdlib/source/poly/lux/abstract/equivalence.lux
index bcb2574bc..bc633d1ed 100644
--- a/stdlib/source/poly/lux/abstract/equivalence.lux
+++ b/stdlib/source/poly/lux/abstract/equivalence.lux
@@ -131,8 +131,8 @@
               [g!eqs (<type>.tuple (<>.many equivalence))
                .let [g!_ (code.local_identifier "_____________")
                      indices (list.indices (list.size g!eqs))
-                     g!lefts (list\map (|>> nat\encode (text\compose "left") code.local_identifier) indices)
-                     g!rights (list\map (|>> nat\encode (text\compose "right") code.local_identifier) indices)]]
+                     g!lefts (list\map (|>> nat\encoded (text\compose "left") code.local_identifier) indices)
+                     g!rights (list\map (|>> nat\encoded (text\compose "right") code.local_identifier) indices)]]
               (in (` (: (~ (@Equivalence inputT))
                         (function ((~ g!_) [(~+ g!lefts)] [(~+ g!rights)])
                           (and (~+ (|> (list.zipped/3 g!eqs g!lefts g!rights)
diff --git a/stdlib/source/poly/lux/data/format/json.lux b/stdlib/source/poly/lux/data/format/json.lux
index 1496026a7..be290d301 100644
--- a/stdlib/source/poly/lux/data/format/json.lux
+++ b/stdlib/source/poly/lux/data/format/json.lux
@@ -44,12 +44,12 @@
   (-> Nat Frac)
   (|>> .int int.frac))
 
-(def: (rec_encode non_rec)
+(def: (rec_encoded non_rec)
   (All [a] (-> (-> (-> a JSON)
                    (-> a JSON))
                (-> a JSON)))
   (function (_ input)
-    (non_rec (rec_encode non_rec) input)))
+    (non_rec (rec_encoded non_rec) input)))
 
 (def: low_mask Nat (|> 1 (i64.left_shifted 32) --))
 (def: high_mask Nat (|> low_mask (i64.left_shifted 32)))
@@ -57,12 +57,12 @@
 (implementation: nat_codec
   (codec.Codec JSON Nat)
   
-  (def: (encode input)
+  (def: (encoded input)
     (let [high (|> input (i64.and high_mask) (i64.right_shifted 32))
           low (i64.and low_mask input)]
       (#/.Array (row (|> high .int int.frac #/.Number)
                      (|> low .int int.frac #/.Number)))))
-  (def: decode
+  (def: decoded
     (</>.result (</>.array
                  (do <>.monad
                    [high </>.number
@@ -73,9 +73,10 @@
 (implementation: int_codec
   (codec.Codec JSON Int)
   
-  (def: encode (|>> .nat (\ nat_codec encode)))
-  (def: decode
-    (|>> (\ nat_codec decode) (\ try.functor map .int))))
+  (def: encoded
+    (|>> .nat (\ nat_codec encoded)))
+  (def: decoded
+    (|>> (\ nat_codec decoded) (\ try.functor map .int))))
 
 (def: (nullable writer)
   {#.doc "Builds a JSON generator for potentially inexistent values."}
@@ -89,33 +90,33 @@
   (All [unit]
     (codec.Codec JSON (unit.Qty unit)))
   
-  (def: encode
+  (def: encoded
     (|>> ((debug.private unit.out))
-         (\ ..int_codec encode)))
-  (def: decode
-    (|>> (\ ..int_codec decode)
+         (\ ..int_codec encoded)))
+  (def: decoded
+    (|>> (\ ..int_codec decoded)
          (\ try.functor map (debug.private unit.in)))))
 
-(poly: encode
+(poly: encoded
   (with_expansions
     [<basic> (template [<matcher> <encoder>]
                [(do !
                   [.let [g!_ (code.local_identifier "_______")]
                    _ <matcher>]
-                  (in (` (: (~ (@JSON\encode inputT))
+                  (in (` (: (~ (@JSON\encoded inputT))
                             <encoder>))))]
 
                [(<type>.exactly Any) (function ((~ g!_) (~ (code.identifier ["" "0"]))) #/.Null)]
                [(<type>.sub Bit)     (|>> #/.Boolean)]
-               [(<type>.sub Nat)     (\ (~! ..nat_codec) (~' encode))]
-               [(<type>.sub Int)     (\ (~! ..int_codec) (~' encode))]
+               [(<type>.sub Nat)     (\ (~! ..nat_codec) (~' encoded))]
+               [(<type>.sub Int)     (\ (~! ..int_codec) (~' encoded))]
                [(<type>.sub Frac)    (|>> #/.Number)]
                [(<type>.sub Text)    (|>> #/.String)])
      <time> (template [<type> <codec>]
               [(do !
                  [_ (<type>.exactly <type>)]
-                 (in (` (: (~ (@JSON\encode inputT))
-                           (|>> (\ (~! <codec>) (~' encode)) #/.String)))))]
+                 (in (` (: (~ (@JSON\encoded inputT))
+                           (|>> (\ (~! <codec>) (~' encoded)) #/.String)))))]
 
               ... [duration.Duration duration.codec]
               ... [instant.Instant instant.codec]
@@ -124,9 +125,9 @@
               [month.Month month.codec])]
     (do {! <>.monad}
       [*env* <type>.env
-       .let [@JSON\encode (: (-> Type Code)
-                             (function (_ type)
-                               (` (-> (~ (poly.code *env* type)) /.JSON))))]
+       .let [@JSON\encoded (: (-> Type Code)
+                              (function (_ type)
+                                (` (-> (~ (poly.code *env* type)) /.JSON))))]
        inputT <type>.next]
       ($_ <>.either
           <basic>
@@ -134,8 +135,8 @@
           (do !
             [unitT (<type>.applied (<>.after (<type>.exactly unit.Qty)
                                              <type>.any))]
-            (in (` (: (~ (@JSON\encode inputT))
-                      (\ (~! qty_codec) (~' encode))))))
+            (in (` (: (~ (@JSON\encoded inputT))
+                      (\ (~! qty_codec) (~' encoded))))))
           (do !
             [.let [g!_ (code.local_identifier "_______")
                    g!key (code.local_identifier "_______key")
@@ -143,8 +144,8 @@
              [_ _ =val=] (<type>.applied ($_ <>.and
                                              (<type>.exactly dictionary.Dictionary)
                                              (<type>.exactly .Text)
-                                             encode))]
-            (in (` (: (~ (@JSON\encode inputT))
+                                             encoded))]
+            (in (` (: (~ (@JSON\encoded inputT))
                       (|>> ((~! dictionary.entries))
                            ((~! list\map) (function ((~ g!_) [(~ g!key) (~ g!val)])
                                             [(~ g!key) ((~ =val=) (~ g!val))]))
@@ -153,60 +154,60 @@
           (do !
             [[_ =sub=] (<type>.applied ($_ <>.and
                                            (<type>.exactly .Maybe)
-                                           encode))]
-            (in (` (: (~ (@JSON\encode inputT))
+                                           encoded))]
+            (in (` (: (~ (@JSON\encoded inputT))
                       ((~! ..nullable) (~ =sub=))))))
           (do !
             [[_ =sub=] (<type>.applied ($_ <>.and
                                            (<type>.exactly .List)
-                                           encode))]
-            (in (` (: (~ (@JSON\encode inputT))
+                                           encoded))]
+            (in (` (: (~ (@JSON\encoded inputT))
                       (|>> ((~! list\map) (~ =sub=)) ((~! row.of_list)) #/.Array)))))
           (do !
             [.let [g!_ (code.local_identifier "_______")
                    g!input (code.local_identifier "_______input")]
-             members (<type>.variant (<>.many encode))
+             members (<type>.variant (<>.many encoded))
              .let [last (-- (list.size members))]]
-            (in (` (: (~ (@JSON\encode inputT))
+            (in (` (: (~ (@JSON\encoded inputT))
                       (function ((~ g!_) (~ g!input))
                         (case (~ g!input)
-                          (~+ (list\join (list\map (function (_ [tag g!encode])
+                          (~+ (list\join (list\map (function (_ [tag g!encoded])
                                                      (if (n.= last tag)
                                                        (.list (` ((~ (code.nat (-- tag))) #1 (~ g!input)))
                                                               (` ((~! /.json) [(~ (code.frac (..tag (-- tag))))
                                                                                #1
-                                                                               ((~ g!encode) (~ g!input))])))
+                                                                               ((~ g!encoded) (~ g!input))])))
                                                        (.list (` ((~ (code.nat tag)) #0 (~ g!input)))
                                                               (` ((~! /.json) [(~ (code.frac (..tag tag)))
                                                                                #0
-                                                                               ((~ g!encode) (~ g!input))])))))
+                                                                               ((~ g!encoded) (~ g!input))])))))
                                                    (list.enumeration members))))))))))
           (do !
-            [g!encoders (<type>.tuple (<>.many encode))
+            [g!encoders (<type>.tuple (<>.many encoded))
              .let [g!_ (code.local_identifier "_______")
                    g!members (|> (list.size g!encoders)
                                  list.indices
-                                 (list\map (|>> n\encode code.local_identifier)))]]
-            (in (` (: (~ (@JSON\encode inputT))
+                                 (list\map (|>> n\encoded code.local_identifier)))]]
+            (in (` (: (~ (@JSON\encoded inputT))
                       (function ((~ g!_) [(~+ g!members)])
-                        ((~! /.json) [(~+ (list\map (function (_ [g!member g!encode])
-                                                      (` ((~ g!encode) (~ g!member))))
+                        ((~! /.json) [(~+ (list\map (function (_ [g!member g!encoded])
+                                                      (` ((~ g!encoded) (~ g!member))))
                                                     (list.zipped/2 g!members g!encoders)))]))))))
           ... Type recursion
           (do !
-            [[selfC non_recC] (<type>.recursive encode)
+            [[selfC non_recC] (<type>.recursive encoded)
              .let [g! (code.local_identifier "____________")]]
-            (in (` (: (~ (@JSON\encode inputT))
-                      ((~! ..rec_encode) (.function ((~ g!) (~ selfC))
-                                           (~ non_recC)))))))
+            (in (` (: (~ (@JSON\encoded inputT))
+                      ((~! ..rec_encoded) (.function ((~ g!) (~ selfC))
+                                            (~ non_recC)))))))
           <type>.recursive_self
           ... Type applications
           (do !
-            [partsC (<type>.applied (<>.many encode))]
+            [partsC (<type>.applied (<>.many encoded))]
             (in (` ((~+ partsC)))))
           ... Polymorphism
           (do !
-            [[funcC varsC bodyC] (<type>.polymorphic encode)]
+            [[funcC varsC bodyC] (<type>.polymorphic encoded)]
             (in (` (: (All [(~+ varsC)]
                         (-> (~+ (list\map (function (_ varC) (` (-> (~ varC) /.JSON)))
                                           varsC))
@@ -220,12 +221,12 @@
           (<>.failure (format "Cannot create JSON encoder for: " (type.format inputT)))
           ))))
 
-(poly: decode
+(poly: decoded
   (with_expansions
     [<basic> (template [<matcher> <decoder>]
                [(do !
                   [_ <matcher>]
-                  (in (` (: (~ (@JSON\decode inputT))
+                  (in (` (: (~ (@JSON\decoded inputT))
                             (~! <decoder>)))))]
 
                [(<type>.exactly Any)  </>.null]
@@ -237,7 +238,7 @@
      <time> (template [<type> <codec>]
               [(do !
                  [_ (<type>.exactly <type>)]
-                 (in (` (: (~ (@JSON\decode inputT))
+                 (in (` (: (~ (@JSON\decoded inputT))
                            ((~! <>.codec) (~! <codec>) (~! </>.string))))))]
 
               ... [duration.Duration duration.codec]
@@ -247,9 +248,9 @@
               [month.Month month.codec])]
     (do {! <>.monad}
       [*env* <type>.env
-       .let [@JSON\decode (: (-> Type Code)
-                             (function (_ type)
-                               (` (</>.Parser (~ (poly.code *env* type))))))]
+       .let [@JSON\decoded (: (-> Type Code)
+                              (function (_ type)
+                                (` (</>.Parser (~ (poly.code *env* type))))))]
        inputT <type>.next]
       ($_ <>.either
           <basic>
@@ -257,29 +258,29 @@
           (do !
             [unitT (<type>.applied (<>.after (<type>.exactly unit.Qty)
                                              <type>.any))]
-            (in (` (: (~ (@JSON\decode inputT))
+            (in (` (: (~ (@JSON\decoded inputT))
                       ((~! <>.codec) (~! qty_codec) (~! </>.any))))))
           (do !
             [[_ _ valC] (<type>.applied ($_ <>.and
                                             (<type>.exactly dictionary.Dictionary)
                                             (<type>.exactly .Text)
-                                            decode))]
-            (in (` (: (~ (@JSON\decode inputT))
+                                            decoded))]
+            (in (` (: (~ (@JSON\decoded inputT))
                       ((~! </>.dictionary) (~ valC))))))
           (do !
             [[_ subC] (<type>.applied (<>.and (<type>.exactly .Maybe)
-                                              decode))]
-            (in (` (: (~ (@JSON\decode inputT))
+                                              decoded))]
+            (in (` (: (~ (@JSON\decoded inputT))
                       ((~! </>.nullable) (~ subC))))))
           (do !
             [[_ subC] (<type>.applied (<>.and (<type>.exactly .List)
-                                              decode))]
-            (in (` (: (~ (@JSON\decode inputT))
+                                              decoded))]
+            (in (` (: (~ (@JSON\decoded inputT))
                       ((~! </>.array) ((~! <>.some) (~ subC)))))))
           (do !
-            [members (<type>.variant (<>.many decode))
+            [members (<type>.variant (<>.many decoded))
              .let [last (-- (list.size members))]]
-            (in (` (: (~ (@JSON\decode inputT))
+            (in (` (: (~ (@JSON\decoded inputT))
                       ($_ ((~! <>.or))
                           (~+ (list\map (function (_ [tag memberC])
                                           (if (n.= last tag)
@@ -293,24 +294,24 @@
                                                    ((~! </>.array))))))
                                         (list.enumeration members))))))))
           (do !
-            [g!decoders (<type>.tuple (<>.many decode))]
-            (in (` (: (~ (@JSON\decode inputT))
+            [g!decoders (<type>.tuple (<>.many decoded))]
+            (in (` (: (~ (@JSON\decoded inputT))
                       ((~! </>.array) ($_ ((~! <>.and)) (~+ g!decoders)))))))
           ... Type recursion
           (do !
-            [[selfC bodyC] (<type>.recursive decode)
+            [[selfC bodyC] (<type>.recursive decoded)
              .let [g! (code.local_identifier "____________")]]
-            (in (` (: (~ (@JSON\decode inputT))
+            (in (` (: (~ (@JSON\decoded inputT))
                       ((~! <>.rec) (.function ((~ g!) (~ selfC))
                                      (~ bodyC)))))))
           <type>.recursive_self
           ... Type applications
           (do !
-            [[funcC argsC] (<type>.applied (<>.and decode (<>.many decode)))]
+            [[funcC argsC] (<type>.applied (<>.and decoded (<>.many decoded)))]
             (in (` ((~ funcC) (~+ argsC)))))
           ... Polymorphism
           (do !
-            [[funcC varsC bodyC] (<type>.polymorphic decode)]
+            [[funcC varsC bodyC] (<type>.polymorphic decoded)]
             (in (` (: (All [(~+ varsC)]
                         (-> (~+ (list\map (|>> (~) </>.Parser (`)) varsC))
                             (</>.Parser ((~ (poly.code *env* inputT)) (~+ varsC)))))
@@ -343,8 +344,8 @@
                     (..codec Record)))}
   (in (.list (` (: (codec.Codec /.JSON (~ inputT))
                    (implementation
-                    (def: (~' encode)
-                      ((~! ..encode) (~ inputT)))
-                    (def: (~' decode)
-                      ((~! </>.result) ((~! ..decode) (~ inputT))))
+                    (def: (~' encoded)
+                      ((~! ..encoded) (~ inputT)))
+                    (def: (~' decoded)
+                      ((~! </>.result) ((~! ..decoded) (~ inputT))))
                     ))))))
diff --git a/stdlib/source/program/aedifex/command/build.lux b/stdlib/source/program/aedifex/command/build.lux
index e4de9ab0a..d3c5b17a0 100644
--- a/stdlib/source/program/aedifex/command/build.lux
+++ b/stdlib/source/program/aedifex/command/build.lux
@@ -16,7 +16,7 @@
      ["." text ("#\." order)
       ["%" format (#+ format)]]
      [collection
-      ["." list ("#\." functor fold)]
+      ["." list ("#\." functor mix)]
       ["." dictionary (#+ Dictionary)]
       ["." set]]]
     [math
@@ -159,21 +159,21 @@
        (list.only (|>> (value@ #///dependency.type)
                        (text\= ///artifact/type.lux_library)
                        not))
-       (list\fold (function (_ dependency uniques)
-                    (let [artifact (value@ #///dependency.artifact dependency)
-                          identity [(value@ #///artifact.group artifact)
-                                    (value@ #///artifact.name artifact)]
-                          version (value@ #///artifact.version artifact)]
-                      (case (dictionary.value identity uniques)
-                        (#.Some [current_version current_path])
-                        (if (\ version_order < version current_version)
-                          (dictionary.has identity [version dependency] uniques)
-                          uniques)
-                        
-                        #.None
-                        (dictionary.has identity [version dependency] uniques))))
-                  (: (Dictionary [Group Name] [Version Dependency])
-                     (dictionary.empty (product.hash text.hash text.hash))))
+       (list\mix (function (_ dependency uniques)
+                   (let [artifact (value@ #///dependency.artifact dependency)
+                         identity [(value@ #///artifact.group artifact)
+                                   (value@ #///artifact.name artifact)]
+                         version (value@ #///artifact.version artifact)]
+                     (case (dictionary.value identity uniques)
+                       (#.Some [current_version current_path])
+                       (if (\ version_order < version current_version)
+                         (dictionary.has identity [version dependency] uniques)
+                         uniques)
+                       
+                       #.None
+                       (dictionary.has identity [version dependency] uniques))))
+                 (: (Dictionary [Group Name] [Version Dependency])
+                    (dictionary.empty (product.hash text.hash text.hash))))
        dictionary.values
        (list\map (|>> product.right (..path fs home)))))
 
diff --git a/stdlib/source/program/aedifex/command/deploy.lux b/stdlib/source/program/aedifex/command/deploy.lux
index 38f975939..62ec8e985 100644
--- a/stdlib/source/program/aedifex/command/deploy.lux
+++ b/stdlib/source/program/aedifex/command/deploy.lux
@@ -69,8 +69,8 @@
         repository
         [artifact ///artifact/type.lux_library]
         (let [pom_data (|> pom
-                           (\ xml.codec encode)
-                           (\ utf8.codec encode))]
+                           (\ xml.codec encoded)
+                           (\ utf8.codec encoded))]
           {#///package.origin (#///repository/origin.Remote "")
            #///package.library [library
                                 (///dependency/status.verified library)]
diff --git a/stdlib/source/program/aedifex/command/deps.lux b/stdlib/source/program/aedifex/command/deps.lux
index 3c8381e51..c1b0990f5 100644
--- a/stdlib/source/program/aedifex/command/deps.lux
+++ b/stdlib/source/program/aedifex/command/deps.lux
@@ -10,7 +10,7 @@
     [data
      [collection
       ["." set (#+ Set)]
-      ["." list ("#\." fold)]
+      ["." list ("#\." mix)]
       ["." dictionary]]
      [text
       ["%" format]]]
@@ -55,7 +55,7 @@
                                                                                  cache)]
     (do ///action.monad
       [cached (|> (dictionary.keys cache)
-                  (list\fold dictionary.lacks resolution)
+                  (list\mix dictionary.lacks resolution)
                   (///dependency/deployment.all local))
        _ (console.write_line (exception.report
                               ["Local successes" (|> local_successes
diff --git a/stdlib/source/program/aedifex/command/install.lux b/stdlib/source/program/aedifex/command/install.lux
index f0677afc7..37a5c77b1 100644
--- a/stdlib/source/program/aedifex/command/install.lux
+++ b/stdlib/source/program/aedifex/command/install.lux
@@ -64,8 +64,8 @@
        _ (///dependency/deployment.one repository
                                        [identity ///artifact/type.lux_library]
                                        (let [pom_data (|> pom
-                                                          (\ xml.codec encode)
-                                                          (\ utf8.codec encode))]
+                                                          (\ xml.codec encoded)
+                                                          (\ utf8.codec encoded))]
                                          {#///package.origin (#///origin.Local "")
                                           #///package.library (let [library (binary.result tar.writer package)]
                                                                 [library (///dependency/status.verified library)])
diff --git a/stdlib/source/program/aedifex/command/pom.lux b/stdlib/source/program/aedifex/command/pom.lux
index 163fa87fa..c43982a98 100644
--- a/stdlib/source/program/aedifex/command/pom.lux
+++ b/stdlib/source/program/aedifex/command/pom.lux
@@ -29,8 +29,8 @@
   (-> (Console Async) (file.System Async) (Command Any))
   (do ///action.monad
     [content (|> (///pom.write profile)
-                 (try\map (|>> (\ xml.codec encode)
-                               (\ utf8.codec encode)))
+                 (try\map (|>> (\ xml.codec encoded)
+                               (\ utf8.codec encoded)))
                  async\in)
      _ (\ fs write content ///pom.file)]
     (console.write_line ..success console)))
diff --git a/stdlib/source/program/aedifex/dependency/deployment.lux b/stdlib/source/program/aedifex/dependency/deployment.lux
index 0e9ab0def..c637ae931 100644
--- a/stdlib/source/program/aedifex/dependency/deployment.lux
+++ b/stdlib/source/program/aedifex/dependency/deployment.lux
@@ -47,8 +47,8 @@
         deploy_hash (: (All [h] (-> (Codec Text (Hash h)) Extension (Hash h) (Async (Try Any))))
                        (function (_ codec extension hash)
                          (|> hash
-                             (\ codec encode)
-                             (\ utf8.codec encode)
+                             (\ codec encoded)
+                             (\ utf8.codec encoded)
                              (\ repository upload (format artifact extension)))))]
     (do {! (try.with async.monad)}
       [_ (\ repository upload artifact data)]
diff --git a/stdlib/source/program/aedifex/dependency/resolution.lux b/stdlib/source/program/aedifex/dependency/resolution.lux
index 73c5f6608..50415b61f 100644
--- a/stdlib/source/program/aedifex/dependency/resolution.lux
+++ b/stdlib/source/program/aedifex/dependency/resolution.lux
@@ -88,12 +88,12 @@
                                               java/lang/String::trim
                                               (:as Text))
                                    @.jvm (|>> java/lang/String::trim)})
-                       (\ utf8.codec decode actual))
+                       (\ utf8.codec decoded actual))
              actual (|> output
                         (text.all_split_by " ")
                         list.head
                         (maybe.else output)
-                        (\ codec decode))
+                        (\ codec decoded))
              _ (exception.assertion exception [artifact extension output]
                                     (\ ///hash.equivalence = (hash library) actual))]
             (in (#.Some actual))))
@@ -138,8 +138,8 @@
        library_&_status (..hashed repository version_template artifact extension)]
       (\ async.monad in
          (do try.monad
-           [pom (\ utf8.codec decode pom_data)
-            pom (\ xml.codec decode pom)
+           [pom (\ utf8.codec decoded pom_data)
+            pom (\ xml.codec decoded pom)
             profile (<xml>.result ///pom.parser (list pom))]
            (in {#///package.origin (#///repository/origin.Remote "")
                 #///package.library library_&_status
diff --git a/stdlib/source/program/aedifex/hash.lux b/stdlib/source/program/aedifex/hash.lux
index 92414c441..74e78ca55 100644
--- a/stdlib/source/program/aedifex/hash.lux
+++ b/stdlib/source/program/aedifex/hash.lux
@@ -54,10 +54,10 @@
     [md5 ..MD5 "MD5"]
     )
 
-  (def: encode
+  (def: encoded
     (Format Binary)
     (binary.aggregate (function (_ byte representation)
-                        (let [hex (\ n.hex encode byte)
+                        (let [hex (\ n.hex encoded byte)
                               hex (case (text.size hex)
                                     1 (format "0" hex)
                                     _ hex)]
@@ -88,7 +88,7 @@
   (template [<name> <size>]
     [(exception: .public (<name> {data Binary})
        (exception.report
-        ["Pseudo hash" (%.text (..encode data))]
+        ["Pseudo hash" (%.text (..encoded data))]
         ["Expected size" (%.nat <size>)]
         ["Actual size" (%.nat (binary.size data))]))]
 
@@ -115,7 +115,7 @@
     (-> Nat Nat)
     (n.* ..hex_per_byte))
 
-  (def: (decode size constructor encoded)
+  (def: (decoded size constructor encoded)
     (All [h]
       (-> Nat (-> Binary (Try (Hash h)))
           (-> Text (Try (Hash h)))))
@@ -128,7 +128,7 @@
             (case (text.split_at ..hex_per_chunk input)
               (#.Some [head tail])
               (do try.monad
-                [head (\ n.hex decode head)
+                [head (\ n.hex decoded head)
                  output (binary.write/64! index head output)]
                 (recur tail (++ chunk) output))
               
@@ -138,7 +138,7 @@
                 (^template [<size> <write>]
                   [<size>
                    (do try.monad
-                     [head (\ n.hex decode input)
+                     [head (\ n.hex decoded input)
                       output (<write> index head output)]
                      (constructor output))])
                 ([1 binary.write/8!]
@@ -151,8 +151,8 @@
     [(implementation: .public <codec>
        (Codec Text (Hash <hash>))
 
-       (def: encode (|>> :representation ..encode))
-       (def: decode (..decode <nat> <constructor>)))]
+       (def: encoded (|>> :representation ..encoded))
+       (def: decoded (..decoded <nat> <constructor>)))]
 
     [sha-1_codec SHA-1 ..sha-1::size ..as_sha-1]
     [md5_codec MD5 ..md5::size ..as_md5]
diff --git a/stdlib/source/program/aedifex/input.lux b/stdlib/source/program/aedifex/input.lux
index 58f37e252..b78e502a6 100644
--- a/stdlib/source/program/aedifex/input.lux
+++ b/stdlib/source/program/aedifex/input.lux
@@ -42,7 +42,7 @@
 (def: project_parser
   (-> Binary (Try Project))
   (|>> (do> try.monad
-            [(\ utf8.codec decode)]
+            [(\ utf8.codec decoded)]
             [..lux_parser]
             [(list) (<code>.result //parser.project)])))
 
diff --git a/stdlib/source/program/aedifex/metadata/artifact.lux b/stdlib/source/program/aedifex/metadata/artifact.lux
index 3512114be..d8134515c 100644
--- a/stdlib/source/program/aedifex/metadata/artifact.lux
+++ b/stdlib/source/program/aedifex/metadata/artifact.lux
@@ -180,8 +180,8 @@
       (#try.Success project)
       (in (|> project
               (do> try.monad
-                   [(\ utf8.codec decode)]
-                   [(\ xml.codec decode)]
+                   [(\ utf8.codec decoded)]
+                   [(\ xml.codec decoded)]
                    [list (<xml>.result ..parser)])))
       
       (#try.Failure error)
@@ -196,6 +196,6 @@
   (-> (Repository Async) Artifact Metadata (Async (Try Any)))
   (|> metadata
       ..format
-      (\ xml.codec encode)
-      (\ utf8.codec encode)
+      (\ xml.codec encoded)
+      (\ utf8.codec encoded)
       (\ repository upload (..uri artifact))))
diff --git a/stdlib/source/program/aedifex/metadata/snapshot.lux b/stdlib/source/program/aedifex/metadata/snapshot.lux
index 6a32effef..3852f5fe1 100644
--- a/stdlib/source/program/aedifex/metadata/snapshot.lux
+++ b/stdlib/source/program/aedifex/metadata/snapshot.lux
@@ -130,8 +130,8 @@
       (#try.Success project)
       (in (|> project
               (do> try.monad
-                   [(\ utf8.codec decode)]
-                   [(\ xml.codec decode)]
+                   [(\ utf8.codec decoded)]
+                   [(\ xml.codec decoded)]
                    [list (<xml>.result ..parser)])))
       
       (#try.Failure error)
@@ -143,6 +143,6 @@
   (-> (Repository Async) Artifact Metadata (Async (Try Any)))
   (|> metadata
       ..format
-      (\ xml.codec encode)
-      (\ utf8.codec encode)
+      (\ xml.codec encoded)
+      (\ utf8.codec encoded)
       (\ repository upload (..uri artifact))))
diff --git a/stdlib/source/program/aedifex/package.lux b/stdlib/source/program/aedifex/package.lux
index c0c73e0fd..7611cdac9 100644
--- a/stdlib/source/program/aedifex/package.lux
+++ b/stdlib/source/program/aedifex/package.lux
@@ -53,7 +53,7 @@
    #library [library
              (#//status.Verified (//hash.sha-1 library)
                                  (//hash.md5 library))]
-   #pom (let [binary_pom (|> pom (\ xml.codec encode) (\ utf8.codec encode))]
+   #pom (let [binary_pom (|> pom (\ xml.codec encoded) (\ utf8.codec encoded))]
           [pom
            binary_pom
            (#//status.Verified (//hash.sha-1 binary_pom)
diff --git a/stdlib/source/program/aedifex/pom.lux b/stdlib/source/program/aedifex/pom.lux
index 810c30588..7f9464e5c 100644
--- a/stdlib/source/program/aedifex/pom.lux
+++ b/stdlib/source/program/aedifex/pom.lux
@@ -16,7 +16,7 @@
      [format
       ["_" xml (#+ Tag XML)]]
      [collection
-      ["." list ("#\." monoid functor fold)]
+      ["." list ("#\." monoid functor mix)]
       ["." set]
       ["." dictionary]]]
     [world
@@ -226,6 +226,6 @@
            _ (<>.some <xml>.any)]
           (in (|> (\ /.monoid identity)
                   (revised@ #/.dependencies (function (_ empty)
-                                              (list\fold set.has empty dependencies)))
+                                              (list\mix set.has empty dependencies)))
                   (revised@ #/.repositories (function (_ empty)
-                                              (list\fold set.has empty repositories)))))))))
+                                              (list\mix set.has empty repositories)))))))))
diff --git a/stdlib/source/program/aedifex/project.lux b/stdlib/source/program/aedifex/project.lux
index 5717221d1..687fd215b 100644
--- a/stdlib/source/program/aedifex/project.lux
+++ b/stdlib/source/program/aedifex/project.lux
@@ -14,7 +14,7 @@
      [collection
       ["." dictionary (#+ Dictionary)]
       ["." set (#+ Set)]
-      ["." list ("#\." fold)]]]]]
+      ["." list ("#\." mix)]]]]]
   ["." // #_
    ["#" profile (#+ Name Profile)]])
 
@@ -63,10 +63,10 @@
       (do {! try.monad}
         [parents (monad.map ! (profile' (set.has name lineage) project)
                             (value@ #//.parents profile))]
-        (in (list\fold (function (_ parent child)
-                         (\ //.monoid compose child parent))
-                       (with@ #//.parents (list) profile)
-                       parents))))
+        (in (list\mix (function (_ parent child)
+                        (\ //.monoid compose child parent))
+                      (with@ #//.parents (list) profile)
+                      parents))))
     
     #.None
     (exception.except ..unknown_profile [name])))
diff --git a/stdlib/source/program/aedifex/repository/identity.lux b/stdlib/source/program/aedifex/repository/identity.lux
index 742c1aef2..4201123c0 100644
--- a/stdlib/source/program/aedifex/repository/identity.lux
+++ b/stdlib/source/program/aedifex/repository/identity.lux
@@ -38,7 +38,7 @@
 
 (def: .public (basic_auth user password)
   (-> User Password Text)
-  (let [credentials (\ utf8.codec encode (format user ":" password))]
+  (let [credentials (\ utf8.codec encoded (format user ":" password))]
     (|> (java/util/Base64::getEncoder)
         (java/util/Base64$Encoder::encodeToString credentials)
         (format "Basic "))))
diff --git a/stdlib/source/program/compositor/import.lux b/stdlib/source/program/compositor/import.lux
index 5d1eba51c..1950c4ebb 100644
--- a/stdlib/source/program/compositor/import.lux
+++ b/stdlib/source/program/compositor/import.lux
@@ -51,26 +51,26 @@
                    (|>> (\ ! map (<binary>.result tar.parser))
                         (\ ! join)
                         (\ ! map (|>> row.list
-                                      (monad.fold ! (function (_ entry import)
-                                                      (case entry
-                                                        (#tar.Normal [path instant mode ownership content])
-                                                        (let [path (tar.from_path path)]
-                                                          (case (dictionary.has' path (tar.data content) import)
-                                                            (#try.Failure error)
-                                                            (exception.except ..duplicate [library path])
+                                      (monad.mix ! (function (_ entry import)
+                                                     (case entry
+                                                       (#tar.Normal [path instant mode ownership content])
+                                                       (let [path (tar.from_path path)]
+                                                         (case (dictionary.has' path (tar.data content) import)
+                                                           (#try.Failure error)
+                                                           (exception.except ..duplicate [library path])
 
-                                                            import'
-                                                            import'))
-                                                        
-                                                        _
-                                                        (exception.except ..useless_tar_entry [])))
-                                                  import)))
+                                                           import'
+                                                           import'))
+                                                       
+                                                       _
+                                                       (exception.except ..useless_tar_entry [])))
+                                                 import)))
                         (\ ! join)))))))
 
 (def: .public (import system libraries)
   (-> (file.System Async) (List Library) (Action Import))
-  (monad.fold (: (Monad Action)
-                 (try.with async.monad))
-              (..import_library system)
-              (dictionary.empty text.hash)
-              libraries))
+  (monad.mix (: (Monad Action)
+                (try.with async.monad))
+             (..import_library system)
+             (dictionary.empty text.hash)
+             libraries))
diff --git a/stdlib/source/program/scriptum.lux b/stdlib/source/program/scriptum.lux
index 5083e0afc..e99367e91 100644
--- a/stdlib/source/program/scriptum.lux
+++ b/stdlib/source/program/scriptum.lux
@@ -24,7 +24,7 @@
        ["." utf8]]]
      [collection
       ["." sequence (#+ Sequence) ("#\." functor)]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      [number
       ["n" nat]]]
@@ -318,7 +318,7 @@
               #macros (list)
               #implementations (list)
               #values (list)}]
-    (|> (list\fold add_definition init defs)
+    (|> (list\mix add_definition init defs)
         (revised@ #types (list.sorted name_sort))
         (revised@ #macros (list.sorted name_sort))
         (revised@ #implementations (list.sorted name_sort))
@@ -399,9 +399,9 @@
                                            md.empty)
                                          type_code)))))
                           types)]
-    (in (list\fold (function.flipped md.then)
-                   (md.heading/2 "Types")
-                   type_docs))))
+    (in (list\mix (function.flipped md.then)
+                  (md.heading/2 "Types")
+                  type_docs))))
 
 (def: (document_macros module_name names)
   (-> Text (List [Text Code]) (Markdown Block))
@@ -415,8 +415,8 @@
                              (do maybe.monad
                                [documentation (annotation.documentation def_annotations)]
                                (in (md.code documentation))))))))
-      (list\fold (function.flipped md.then)
-                 (md.heading/2 "Macros"))))
+      (list\mix (function.flipped md.then)
+                (md.heading/2 "Macros"))))
 
 (template [<singular> <plural> <header>]
   [(def: (<singular> module type)
@@ -443,8 +443,8 @@
                              _
                              md.empty)
                            (<singular> module value_type)))))
-         (list\fold (function.flipped md.then)
-                    (md.heading/2 <header>))))]
+         (list\mix (function.flipped md.then)
+                   (md.heading/2 <header>))))]
 
   [document_implementation document_implementations "Implementations"]
   [document_value     document_values     "Values"]
@@ -493,7 +493,7 @@
   (-> [Text (Markdown Block)] (IO Any))
   (let [path (format (text.replaced "/" "_" module_name) ".md")]
     (do io.monad
-      [outcome (\ file.default write (\ utf8.codec encode (md.markdown documentation)) path)]
+      [outcome (\ file.default write (\ utf8.codec encoded (md.markdown documentation)) path)]
       (in (case outcome
             (#try.Failure error)
             (debug.log! (exception.error io_error error))
diff --git a/stdlib/source/specification/compositor/generation/case.lux b/stdlib/source/specification/compositor/generation/case.lux
index 8508220ed..87fc1a5fc 100644
--- a/stdlib/source/specification/compositor/generation/case.lux
+++ b/stdlib/source/specification/compositor/generation/case.lux
@@ -13,7 +13,7 @@
      ["n" nat]
      ["f" frac]]
     [collection
-     ["." list ("#\." fold)]]]
+     ["." list ("#\." mix)]]]
    [math
     ["r" random (#+ Random)]]
    [tool
@@ -152,7 +152,7 @@
                   (function (_ head tail)
                     (synthesis.variant [0 #1 (synthesis.tuple (list head tail))])))
         _list_ (: (-> (List Synthesis) Synthesis)
-                  (list\fold _item_ _end_))]
+                  (list\mix _item_ _end_))]
     (let [__tuple__ (: (-> (List Synthesis) Synthesis)
                        (|>> list.reversed _list_ [9 #0] synthesis.variant _code_))
           __form__ (: (-> (List Synthesis) Synthesis)
@@ -169,9 +169,9 @@
                        (_code_ (synthesis.variant [7 #0 (synthesis.tuple (list (synthesis.text module)
                                                                                (synthesis.text short)))]))))
           __list__ (: (-> (List Synthesis) Synthesis)
-                      (list\fold (function (_ head tail)
-                                   (__form__ (list (__tag__ ["" "Item"]) head tail)))
-                                 (__tag__ ["" "End"])))
+                      (list\mix (function (_ head tail)
+                                  (__form__ (list (__tag__ ["" "Item"]) head tail)))
+                                (__tag__ ["" "End"])))
           __apply__ (: (-> Synthesis Synthesis Synthesis)
                        (function (_ func arg)
                          (__form__ (list func arg))))]
diff --git a/stdlib/source/specification/lux/abstract/apply.lux b/stdlib/source/specification/lux/abstract/apply.lux
index 71df69a83..e857c81e5 100644
--- a/stdlib/source/specification/lux/abstract/apply.lux
+++ b/stdlib/source/specification/lux/abstract/apply.lux
@@ -21,7 +21,7 @@
     [sample (\ ! map injection random.nat)]
     (_.test "Identity."
             ((comparison n.=)
-             (\apply (injection function.identity) sample)
+             (\on sample (injection function.identity))
              sample))))
 
 (def: (homomorphism injection comparison (^open "\."))
@@ -31,7 +31,7 @@
      increase (\ ! map n.+ random.nat)]
     (_.test "Homomorphism."
             ((comparison n.=)
-             (\apply (injection increase) (injection sample))
+             (\on (injection sample) (injection increase))
              (injection (increase sample))))))
 
 (def: (interchange injection comparison (^open "\."))
@@ -41,8 +41,9 @@
      increase (\ ! map n.+ random.nat)]
     (_.test "Interchange."
             ((comparison n.=)
-             (\apply (injection increase) (injection sample))
-             (\apply (injection (function (_ f) (f sample))) (injection increase))))))
+             (\on (injection sample) (injection increase))
+             (\on (injection increase) (injection (: (-> (-> Nat Nat) Nat)
+                                                     (function (_ f) (f sample)))))))))
 
 (def: (composition injection comparison (^open "\."))
   (All [f] (-> (Injection f) (Comparison f) (Apply f) Test))
@@ -52,15 +53,13 @@
      decrease (\ ! map n.- random.nat)]
     (_.test "Composition."
             ((comparison n.=)
-             (_$ \apply
-                 (injection function.composite)
-                 (injection increase)
-                 (injection decrease)
-                 (injection sample))
-             ($_ \apply
-                 (injection increase)
-                 (injection decrease)
-                 (injection sample))))))
+             (|> (injection function.composite)
+                 (\on (injection increase))
+                 (\on (injection decrease))
+                 (\on (injection sample)))
+             (\on (\on (injection sample)
+                       (injection increase))
+                  (injection decrease))))))
 
 (def: .public (spec injection comparison apply)
   (All [f] (-> (Injection f) (Comparison f) (Apply f) Test))
diff --git a/stdlib/source/specification/lux/abstract/codec.lux b/stdlib/source/specification/lux/abstract/codec.lux
index 3cbb712d2..1725bbc92 100644
--- a/stdlib/source/specification/lux/abstract/codec.lux
+++ b/stdlib/source/specification/lux/abstract/codec.lux
@@ -19,7 +19,7 @@
     [expected generator]
     (_.for [/.Codec]
            (_.test "Isomorphism."
-                   (case (|> expected @//encode @//decode)
+                   (case (|> expected @//encoded @//decoded)
                      (#try.Success actual)
                      (@//= expected actual)
                      
diff --git a/stdlib/source/specification/lux/abstract/fold.lux b/stdlib/source/specification/lux/abstract/fold.lux
deleted file mode 100644
index 6d3ad1f7e..000000000
--- a/stdlib/source/specification/lux/abstract/fold.lux
+++ /dev/null
@@ -1,23 +0,0 @@
-(.module:
-  [library
-   [lux #*
-    ["_" test (#+ Test)]
-    [abstract
-     [monad (#+ do)]]
-    [math
-     ["." random]
-     [number
-      ["n" nat]]]]]
-  [//
-   [functor (#+ Injection Comparison)]]
-  [\\library
-   ["." /]])
-
-(def: .public (spec injection comparison (^open "@//."))
-  (All [f] (-> (Injection f) (Comparison f) (/.Fold f) Test))
-  (do random.monad
-    [subject random.nat
-     parameter random.nat]
-    (_.cover [/.Fold]
-             (n.= (@//fold n.+ parameter (injection subject))
-                  (n.+ parameter subject)))))
diff --git a/stdlib/source/specification/lux/abstract/mix.lux b/stdlib/source/specification/lux/abstract/mix.lux
new file mode 100644
index 000000000..1097ac37f
--- /dev/null
+++ b/stdlib/source/specification/lux/abstract/mix.lux
@@ -0,0 +1,23 @@
+(.module:
+  [library
+   [lux #*
+    ["_" test (#+ Test)]
+    [abstract
+     [monad (#+ do)]]
+    [math
+     ["." random]
+     [number
+      ["n" nat]]]]]
+  [//
+   [functor (#+ Injection Comparison)]]
+  [\\library
+   ["." /]])
+
+(def: .public (spec injection comparison (^open "@//."))
+  (All [f] (-> (Injection f) (Comparison f) (/.Mix f) Test))
+  (do random.monad
+    [subject random.nat
+     parameter random.nat]
+    (_.cover [/.Mix]
+             (n.= (@//mix n.+ parameter (injection subject))
+                  (n.+ parameter subject)))))
diff --git a/stdlib/source/specification/lux/world/file.lux b/stdlib/source/specification/lux/world/file.lux
index 0b5414dea..504990ea4 100644
--- a/stdlib/source/specification/lux/world/file.lux
+++ b/stdlib/source/specification/lux/world/file.lux
@@ -260,8 +260,8 @@
       in
       (do {! async.monad}
         [fs (async.future fs)
-         make_file!/0 (/.make_file ! fs (utf8\encode file/0) file/0)
-         make_file!/1 (/.make_file ! fs (utf8\encode file/0) file/0)])
+         make_file!/0 (/.make_file ! fs (utf8\encoded file/0) file/0)
+         make_file!/1 (/.make_file ! fs (utf8\encoded file/0) file/0)])
       ($_ _.and'
           (_.cover' [/.make_file]
                     (case make_file!/0
@@ -298,7 +298,7 @@
          pre_dir/0 (\ fs directory? dir)
          pre_dir/1 (/.exists? ! fs dir)
 
-         made_file? (/.make_file ! fs (utf8\encode file) file)
+         made_file? (/.make_file ! fs (utf8\encoded file) file)
          made_dir? (\ fs make_directory dir)
 
          post_file/0 (\ fs file? file)
diff --git a/stdlib/source/test/aedifex/command/auto.lux b/stdlib/source/test/aedifex/command/auto.lux
index ea62b6daa..1ed19ddf7 100644
--- a/stdlib/source/test/aedifex/command/auto.lux
+++ b/stdlib/source/test/aedifex/command/auto.lux
@@ -57,7 +57,7 @@
          (if (n.= expected_runs actual_runs)
            (in (#try.Failure end_signal))
            (do (try.with !)
-             [_ (\ fs write (\ utf8.codec encode (%.nat actual_runs)) dummy_file)
+             [_ (\ fs write (\ utf8.codec encoded (%.nat actual_runs)) dummy_file)
               _ (\ fs modify
                    (|> actual_runs .int instant.of_millis)
                    dummy_file)]
diff --git a/stdlib/source/test/aedifex/command/deploy.lux b/stdlib/source/test/aedifex/command/deploy.lux
index 1df6a4180..526227f2d 100644
--- a/stdlib/source/test/aedifex/command/deploy.lux
+++ b/stdlib/source/test/aedifex/command/deploy.lux
@@ -91,13 +91,13 @@
                           actual_sha-1 (\ repository download (///repository/remote.uri (value@ #///artifact.version artifact) artifact (format ///artifact/extension.lux_library ///artifact/extension.sha-1)))
                           actual_sha-1 (\ async.monad in
                                           (do try.monad
-                                            [actual_sha-1 (\ utf8.codec decode actual_sha-1)]
-                                            (\ ///hash.sha-1_codec decode actual_sha-1)))
+                                            [actual_sha-1 (\ utf8.codec decoded actual_sha-1)]
+                                            (\ ///hash.sha-1_codec decoded actual_sha-1)))
                           actual_md5 (\ repository download (///repository/remote.uri (value@ #///artifact.version artifact) artifact (format ///artifact/extension.lux_library ///artifact/extension.md5)))
                           actual_md5 (\ async.monad in
                                         (do try.monad
-                                          [actual_md5 (\ utf8.codec decode actual_md5)]
-                                          (\ ///hash.md5_codec decode actual_md5)))
+                                          [actual_md5 (\ utf8.codec decoded actual_md5)]
+                                          (\ ///hash.md5_codec decoded actual_md5)))
 
                           .let [succeeded!
                                 (text\= /.success logging)
@@ -107,7 +107,7 @@
                                           actual_library)
 
                                 deployed_pom!
-                                (binary\= (|> expected_pom (\ xml.codec encode) (\ utf8.codec encode))
+                                (binary\= (|> expected_pom (\ xml.codec encoded) (\ utf8.codec encoded))
                                           actual_pom)
 
                                 deployed_sha-1!
diff --git a/stdlib/source/test/aedifex/command/deps.lux b/stdlib/source/test/aedifex/command/deps.lux
index ec45ba697..87a3e1731 100644
--- a/stdlib/source/test/aedifex/command/deps.lux
+++ b/stdlib/source/test/aedifex/command/deps.lux
@@ -85,12 +85,12 @@
                dependee_package (|> dependee_package
                                     (with@ #///package.origin (#///repository/origin.Remote ""))
                                     (with@ #///package.pom [dependee_pom
-                                                            (|> dependee_pom (\ xml.codec encode) (\ utf8.codec encode))
+                                                            (|> dependee_pom (\ xml.codec encoded) (\ utf8.codec encoded))
                                                             #///dependency/status.Unverified]))
                depender_package (|> depender_package
                                     (with@ #///package.origin (#///repository/origin.Remote ""))
                                     (with@ #///package.pom [depender_pom
-                                                            (|> depender_pom (\ xml.codec encode) (\ utf8.codec encode))
+                                                            (|> depender_pom (\ xml.codec encoded) (\ utf8.codec encoded))
                                                             #///dependency/status.Unverified]))
 
                fs (file.mock (\ file.default separator))
diff --git a/stdlib/source/test/aedifex/command/pom.lux b/stdlib/source/test/aedifex/command/pom.lux
index b06a7c944..7c2097a4d 100644
--- a/stdlib/source/test/aedifex/command/pom.lux
+++ b/stdlib/source/test/aedifex/command/pom.lux
@@ -44,8 +44,8 @@
                 (do !
                   [verdict (do ///action.monad
                              [expected (|> (///pom.write sample)
-                                           (try\map (|>> (\ xml.codec encode)
-                                                         (\ utf8.codec encode)))
+                                           (try\map (|>> (\ xml.codec encoded)
+                                                         (\ utf8.codec encoded)))
                                            (\ ! in))
                               actual (\ fs read ///pom.file)
 
diff --git a/stdlib/source/test/aedifex/dependency/deployment.lux b/stdlib/source/test/aedifex/dependency/deployment.lux
index 009298783..97fd9f1f4 100644
--- a/stdlib/source/test/aedifex/dependency/deployment.lux
+++ b/stdlib/source/test/aedifex/dependency/deployment.lux
@@ -20,7 +20,7 @@
      [collection
       ["." dictionary (#+ Dictionary)]
       ["." set]
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      ["." random (#+ Random)]
      [number
@@ -171,10 +171,10 @@
                bundles (|> ..bundle
                            (random.set hash num_bundles)
                            (\ ! map set.list))
-               .let [resolution (list\fold (function (_ [dependency expected_artifact package] resolution)
-                                             (dictionary.has dependency package resolution))
-                                           resolution.empty
-                                           bundles)
+               .let [resolution (list\mix (function (_ [dependency expected_artifact package] resolution)
+                                            (dictionary.has dependency package resolution))
+                                          resolution.empty
+                                          bundles)
                      cache (: Cache
                               (atom.atom (dictionary.empty text.hash)))
                      http (..http cache)
diff --git a/stdlib/source/test/aedifex/dependency/resolution.lux b/stdlib/source/test/aedifex/dependency/resolution.lux
index 44420243d..355cf9c98 100644
--- a/stdlib/source/test/aedifex/dependency/resolution.lux
+++ b/stdlib/source/test/aedifex/dependency/resolution.lux
@@ -77,14 +77,14 @@
 (def: sha-1
   (-> Binary Binary)
   (|>> ///hash.sha-1
-       (\ ///hash.sha-1_codec encode)
-       (\ utf8.codec encode)))
+       (\ ///hash.sha-1_codec encoded)
+       (\ utf8.codec encoded)))
 
 (def: md5
   (-> Binary Binary)
   (|>> ///hash.md5
-       (\ ///hash.md5_codec encode)
-       (\ utf8.codec encode)))
+       (\ ///hash.md5_codec encoded)
+       (\ utf8.codec encoded)))
 
 (def: .public nope
   (Mock Any)
@@ -112,8 +112,8 @@
                       (|> package
                           (value@ #///package.pom)
                           product.left
-                          (\ xml.codec encode)
-                          (\ utf8.codec encode)))]
+                          (\ xml.codec encoded)
+                          (\ utf8.codec encoded)))]
            (cond (text.ends_with? ///artifact/extension.lux_library uri)
                  (#try.Success [state library])
 
@@ -166,23 +166,23 @@
              (#try.Success [state (|> expected_package
                                       (value@ #///package.pom)
                                       product.left
-                                      (\ xml.codec encode)
-                                      (\ utf8.codec encode))])
+                                      (\ xml.codec encoded)
+                                      (\ utf8.codec encoded))])
 
              (text.ends_with? ..pom_sha-1 uri)
              (#try.Success [state (|> dummy_package
                                       (value@ #///package.pom)
                                       product.left
-                                      (\ xml.codec encode)
-                                      (\ utf8.codec encode)
+                                      (\ xml.codec encoded)
+                                      (\ utf8.codec encoded)
                                       ..sha-1)])
 
              (text.ends_with? ..pom_md5 uri)
              (#try.Success [state (|> expected_package
                                       (value@ #///package.pom)
                                       product.left
-                                      (\ xml.codec encode)
-                                      (\ utf8.codec encode)
+                                      (\ xml.codec encoded)
+                                      (\ utf8.codec encoded)
                                       ..md5)])
 
              ... else
@@ -219,23 +219,23 @@
              (#try.Success [state (|> expected_package
                                       (value@ #///package.pom)
                                       product.left
-                                      (\ xml.codec encode)
-                                      (\ utf8.codec encode))])
+                                      (\ xml.codec encoded)
+                                      (\ utf8.codec encoded))])
 
              (text.ends_with? ..pom_sha-1 uri)
              (#try.Success [state (|> expected_package
                                       (value@ #///package.pom)
                                       product.left
-                                      (\ xml.codec encode)
-                                      (\ utf8.codec encode)
+                                      (\ xml.codec encoded)
+                                      (\ utf8.codec encoded)
                                       ..sha-1)])
 
              (text.ends_with? ..pom_md5 uri)
              (#try.Success [state (|> dummy_package
                                       (value@ #///package.pom)
                                       product.left
-                                      (\ xml.codec encode)
-                                      (\ utf8.codec encode)
+                                      (\ xml.codec encoded)
+                                      (\ utf8.codec encoded)
                                       ..md5)])
 
              ... else
@@ -381,17 +381,17 @@
 
            dependee_package (with@ #///package.pom
                                    [dependee_pom
-                                    (|> dependee_pom (\ xml.codec encode) (\ utf8.codec encode))
+                                    (|> dependee_pom (\ xml.codec encoded) (\ utf8.codec encoded))
                                     #///dependency/status.Unverified]
                                    dependee_package)
            depender_package (with@ #///package.pom
                                    [depender_pom
-                                    (|> depender_pom (\ xml.codec encode) (\ utf8.codec encode))
+                                    (|> depender_pom (\ xml.codec encoded) (\ utf8.codec encoded))
                                     #///dependency/status.Unverified]
                                    depender_package)
            ignored_package (with@ #///package.pom
                                   [ignored_pom
-                                   (|> ignored_pom (\ xml.codec encode) (\ utf8.codec encode))
+                                   (|> ignored_pom (\ xml.codec encoded) (\ utf8.codec encoded))
                                    #///dependency/status.Unverified]
                                   ignored_package)]]
     (in [[dependee depender ignored]
diff --git a/stdlib/source/test/aedifex/hash.lux b/stdlib/source/test/aedifex/hash.lux
index dc5633040..5e267091d 100644
--- a/stdlib/source/test/aedifex/hash.lux
+++ b/stdlib/source/test/aedifex/hash.lux
@@ -80,8 +80,8 @@
                                [(do random.monad
                                   [expected (..random <hash>)]
                                   (_.cover [<codec>]
-                                           (case (\ <codec> decode
-                                                    (format (\ <codec> encode expected)
+                                           (case (\ <codec> decoded
+                                                    (format (\ <codec> encoded expected)
                                                             "AABBCC"))
                                              (#try.Success actual)
                                              false
diff --git a/stdlib/source/test/aedifex/input.lux b/stdlib/source/test/aedifex/input.lux
index 1c47fdd6f..675357e7e 100644
--- a/stdlib/source/test/aedifex/input.lux
+++ b/stdlib/source/test/aedifex/input.lux
@@ -53,7 +53,7 @@
                          [.let [profile (|> expected
                                             //format.profile
                                             %.code
-                                            (\ utf8.codec encode))]
+                                            (\ utf8.codec encoded))]
                           _ (\ fs write profile //project.file)
                           actual (: (Async (Try Profile))
                                     (/.read async.monad fs //.default))]
diff --git a/stdlib/source/test/aedifex/package.lux b/stdlib/source/test/aedifex/package.lux
index 9596eb63f..7e9cf1dd6 100644
--- a/stdlib/source/test/aedifex/package.lux
+++ b/stdlib/source/test/aedifex/package.lux
@@ -92,8 +92,8 @@
                                   expected_md5 (//hash.md5 binary_pom)]
                               (and (same? expected_pom actual_pom)
                                    (|> (do try.monad
-                                         [xml_pom (\ utf8.codec decode binary_pom)
-                                          decoded_pom (\ xml.codec decode xml_pom)]
+                                         [xml_pom (\ utf8.codec decoded binary_pom)
+                                          decoded_pom (\ xml.codec decoded xml_pom)]
                                          (in (\ xml.equivalence = actual_pom decoded_pom)))
                                        (try.else false))
                                    (case pom_status
diff --git a/stdlib/source/test/aedifex/repository/local.lux b/stdlib/source/test/aedifex/repository/local.lux
index b2352bdd2..ccc13752f 100644
--- a/stdlib/source/test/aedifex/repository/local.lux
+++ b/stdlib/source/test/aedifex/repository/local.lux
@@ -35,7 +35,7 @@
                repo (/.repository program fs)]
 
          uri (random.ascii/lower 10)
-         expected (\ ! map (\ utf8.codec encode)
+         expected (\ ! map (\ utf8.codec encoded)
                      (random.ascii/lower 10))]
         ($_ _.and
             (in (do async.monad
diff --git a/stdlib/source/test/aedifex/repository/remote.lux b/stdlib/source/test/aedifex/repository/remote.lux
index 44f913863..96d62ef6f 100644
--- a/stdlib/source/test/aedifex/repository/remote.lux
+++ b/stdlib/source/test/aedifex/repository/remote.lux
@@ -33,7 +33,7 @@
 
 (def: (url_body url)
   (-> URL (@http.Body IO))
-  (let [url (\ utf8.codec encode url)]
+  (let [url (\ utf8.codec encoded url)]
     (function (_ _)
       (io.io (#try.Success [(binary.size url) url])))))
 
@@ -90,7 +90,7 @@
          user (random.ascii/lower 10)
          password (random.ascii/lower 10)
 
-         content (\ ! map (\ utf8.codec encode)
+         content (\ ! map (\ utf8.codec encoded)
                     (random.ascii/lower 10))]
         ($_ _.and
             (_.cover [/.repository /.user_agent /.Address]
@@ -100,7 +100,7 @@
                                               address)]
                        (and (|> (\ repo download uri)
                                 io.run!
-                                (try\map (\ utf8.codec decode))
+                                (try\map (\ utf8.codec decoded))
                                 try\join
                                 (try\map (text\= (format address uri)))
                                 (try.else false))
diff --git a/stdlib/source/test/lux/abstract.lux b/stdlib/source/test/lux/abstract.lux
index cb41844eb..d65330a22 100644
--- a/stdlib/source/test/lux/abstract.lux
+++ b/stdlib/source/test/lux/abstract.lux
@@ -10,7 +10,7 @@
    ["#." enum]
    ["#." equivalence]
    ["#." hash]
-   ["#." fold]
+   ["#." mix]
    ["#." functor
     ["#/." contravariant]]
    ["#." interval]
@@ -49,7 +49,7 @@
       /enum.test
       /equivalence.test
       /hash.test
-      /fold.test
+      /mix.test
       /interval.test
       /monoid.test
       /order.test
diff --git a/stdlib/source/test/lux/abstract/apply.lux b/stdlib/source/test/lux/abstract/apply.lux
index fcdf5d793..75da1dc47 100644
--- a/stdlib/source/test/lux/abstract/apply.lux
+++ b/stdlib/source/test/lux/abstract/apply.lux
@@ -25,9 +25,9 @@
         ($_ _.and
             (_.cover [/.composite]
                      (let [expected (n.+ left right)]
-                       (case (\ (/.composite maybe.monad maybe.apply list.apply) apply
-                                (#.Some (list (n.+ left)))
-                                (#.Some (list right)))
+                       (case (\ (/.composite maybe.monad maybe.apply list.apply) on
+                                (#.Some (list right))
+                                (#.Some (list (n.+ left))))
                          (^ (#.Some (list actual)))
                          (n.= expected actual)
 
diff --git a/stdlib/source/test/lux/abstract/codec.lux b/stdlib/source/test/lux/abstract/codec.lux
index e3fd09626..32668c30f 100644
--- a/stdlib/source/test/lux/abstract/codec.lux
+++ b/stdlib/source/test/lux/abstract/codec.lux
@@ -21,12 +21,12 @@
   (Codec JSON Bit)
   (let [field "value"]
     (implementation
-     (def: encode
+     (def: encoded
        (|>> #json.Boolean
             [field]
             list
             json.object))
-     (def: decode
+     (def: decoded
        (json.boolean_field field)))))
 
 (def: codec
@@ -39,7 +39,7 @@
     [expected random.bit]
     (<| (_.covering /._)
         (_.cover [/.composite]
-                 (case (|> expected (\ ..codec encode) (\ ..codec decode))
+                 (case (|> expected (\ ..codec encoded) (\ ..codec decoded))
                    (#try.Success actual)
                    (bit\= expected actual)
                    
diff --git a/stdlib/source/test/lux/abstract/enum.lux b/stdlib/source/test/lux/abstract/enum.lux
index 179dad8df..33dff9472 100644
--- a/stdlib/source/test/lux/abstract/enum.lux
+++ b/stdlib/source/test/lux/abstract/enum.lux
@@ -9,7 +9,7 @@
     [data
      ["." product]
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      ["." random (#+ Random)]
      [number
@@ -39,12 +39,12 @@
                                                   (list.reversed (/.range n.enum end start)))
                              every_element_is_a_successor? (case range
                                                              (#.Item head tail)
-                                                             (|> (list\fold (function (_ next [verdict prev])
-                                                                              [(and verdict
-                                                                                    (n.= next (\ n.enum succ prev)))
-                                                                               next])
-                                                                            [true head]
-                                                                            tail)
+                                                             (|> (list\mix (function (_ next [verdict prev])
+                                                                             [(and verdict
+                                                                                   (n.= next (\ n.enum succ prev)))
+                                                                              next])
+                                                                           [true head]
+                                                                           tail)
                                                                  product.left)
                                                              
                                                              #.End
diff --git a/stdlib/source/test/lux/abstract/fold.lux b/stdlib/source/test/lux/abstract/fold.lux
deleted file mode 100644
index 1dbf9eec8..000000000
--- a/stdlib/source/test/lux/abstract/fold.lux
+++ /dev/null
@@ -1,26 +0,0 @@
-(.module:
-  [library
-   [lux #*
-    ["_" test (#+ Test)]
-    [abstract
-     [monad (#+ do)]]
-    [data
-     [collection
-      ["." list]]]
-    [math
-     ["." random]
-     [number
-      ["n" nat]]]]]
-  [\\library
-   ["." / (#+ Fold)]])
-
-(def: .public test
-  Test
-  (do random.monad
-    [samples (random.list 10 random.nat)]
-    (<| (_.covering /._)
-        ($_ _.and
-            (_.cover [/.with_monoid]
-                     (n.= (\ list.fold fold (\ n.addition compose) (\ n.addition identity) samples)
-                          (/.with_monoid n.addition list.fold samples)))
-            ))))
diff --git a/stdlib/source/test/lux/abstract/mix.lux b/stdlib/source/test/lux/abstract/mix.lux
new file mode 100644
index 000000000..5aac1fd2b
--- /dev/null
+++ b/stdlib/source/test/lux/abstract/mix.lux
@@ -0,0 +1,26 @@
+(.module:
+  [library
+   [lux #*
+    ["_" test (#+ Test)]
+    [abstract
+     [monad (#+ do)]]
+    [data
+     [collection
+      ["." list]]]
+    [math
+     ["." random]
+     [number
+      ["n" nat]]]]]
+  [\\library
+   ["." / (#+ Mix)]])
+
+(def: .public test
+  Test
+  (do random.monad
+    [samples (random.list 10 random.nat)]
+    (<| (_.covering /._)
+        ($_ _.and
+            (_.cover [/.with_monoid]
+                     (n.= (\ list.mix mix (\ n.addition compose) (\ n.addition identity) samples)
+                          (/.with_monoid n.addition list.mix samples)))
+            ))))
diff --git a/stdlib/source/test/lux/abstract/monad.lux b/stdlib/source/test/lux/abstract/monad.lux
index 051f63a5c..5ede269ef 100644
--- a/stdlib/source/test/lux/abstract/monad.lux
+++ b/stdlib/source/test/lux/abstract/monad.lux
@@ -5,7 +5,7 @@
     [data
      ["." identity (#+ Identity)]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      ["." random]
      [number
@@ -52,13 +52,13 @@
                         (|> poly
                             (/.only identity.monad (|>> n.even? (\ identity.monad in)))
                             (: (Identity (List Nat))))))
-            (_.cover [/.fold]
-                     (n.= (list\fold n.+ 0 poly)
+            (_.cover [/.mix]
+                     (n.= (list\mix n.+ 0 poly)
                           (|> poly
-                              (/.fold identity.monad
-                                      (function (_ part whole)
-                                        (\ identity.monad in
-                                           (n.+ part whole)))
-                                      0)
+                              (/.mix identity.monad
+                                     (function (_ part whole)
+                                       (\ identity.monad in
+                                          (n.+ part whole)))
+                                     0)
                               (: (Identity Nat)))))
             ))))
diff --git a/stdlib/source/test/lux/abstract/monoid.lux b/stdlib/source/test/lux/abstract/monoid.lux
index 75eee67c6..c78d2d8f6 100644
--- a/stdlib/source/test/lux/abstract/monoid.lux
+++ b/stdlib/source/test/lux/abstract/monoid.lux
@@ -23,8 +23,8 @@
      intR random.int]
     (<| (_.covering /._)
         ($_ _.and
-            (_.cover [/.composite]
-                     (let [[natLR intLR] (\ (/.composite nat.addition int.multiplication) compose
+            (_.cover [/.and]
+                     (let [[natLR intLR] (\ (/.and nat.addition int.multiplication) compose
                                             [natL intL] [natR intR])]
                        (and (nat.= (\ nat.addition compose natL natR)
                                    natLR)
diff --git a/stdlib/source/test/lux/control/concurrency/frp.lux b/stdlib/source/test/lux/control/concurrency/frp.lux
index 5876331b6..174c8adc7 100644
--- a/stdlib/source/test/lux/control/concurrency/frp.lux
+++ b/stdlib/source/test/lux/control/concurrency/frp.lux
@@ -14,7 +14,7 @@
      ["." io (#+ IO io)]]
     [data
      [collection
-      ["." list ("#\." fold monoid)]
+      ["." list ("#\." mix monoid)]
       ["." row (#+ Row)]]]
     [math
      ["." random]
@@ -161,22 +161,22 @@
                     (_.cover' [/.Subscriber /.subscribe!]
                               (list\= inputs listened))))
               (in (do async.monad
-                    [actual (/.aggregate (function (_ input total)
-                                           (async.resolved (n.+ input total)))
-                                         0
-                                         (/.sequential 0 inputs))]
-                    (_.cover' [/.aggregate]
-                              (n.= (list\fold n.+ 0 inputs)
+                    [actual (/.mix (function (_ input total)
+                                     (async.resolved (n.+ input total)))
+                                   0
+                                   (/.sequential 0 inputs))]
+                    (_.cover' [/.mix]
+                              (n.= (list\mix n.+ 0 inputs)
                                    actual))))
               (in (do async.monad
                     [actual (|> inputs
                                 (/.sequential 0)
-                                (/.aggregates (function (_ input total)
-                                                (async.resolved (n.+ input total)))
-                                              0)
+                                (/.mixes (function (_ input total)
+                                           (async.resolved (n.+ input total)))
+                                         0)
                                 /.list)]
-                    (_.cover' [/.aggregates]
-                              (list\= (list.aggregates n.+ 0 inputs)
+                    (_.cover' [/.mixes]
+                              (list\= (list.mixes n.+ 0 inputs)
                                       actual))))
               (in (do async.monad
                     [actual (|> (list distint/0 distint/0 distint/0
@@ -218,6 +218,6 @@
                                 /.list)]
                     (_.cover' [/.iterations]
                               (and (n.= max_iterations (list.size actual))
-                                   (list\= (list.aggregates n.+ sample (list.repeated (-- max_iterations) shift))
+                                   (list\= (list.mixes n.+ sample (list.repeated (-- max_iterations) shift))
                                            actual)))))
               )))))
diff --git a/stdlib/source/test/lux/control/function/memo.lux b/stdlib/source/test/lux/control/function/memo.lux
index 914247204..3941998fc 100644
--- a/stdlib/source/test/lux/control/function/memo.lux
+++ b/stdlib/source/test/lux/control/function/memo.lux
@@ -11,7 +11,7 @@
      ["." product]
      [collection
       ["." dictionary (#+ Dictionary)]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      ["." random]
      [number
@@ -112,7 +112,7 @@
                                              (in (n.* input output')))))))
                          expected (|> (list.indices input)
                                       (list\map ++)
-                                      (list\fold n.* 1))
+                                      (list\mix n.* 1))
                          actual (|> (memo input)
                                     (state.result (dictionary.empty n.hash))
                                     product.right)]
diff --git a/stdlib/source/test/lux/control/function/mixin.lux b/stdlib/source/test/lux/control/function/mixin.lux
index b41da5623..001626888 100644
--- a/stdlib/source/test/lux/control/function/mixin.lux
+++ b/stdlib/source/test/lux/control/function/mixin.lux
@@ -13,7 +13,7 @@
     [data
      ["." product]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      ["." random (#+ Random)]
      [number
@@ -40,7 +40,7 @@
                                     output))))
                expected (|> (list.indices input)
                             (list\map ++)
-                            (list\fold n.* 1))]])
+                            (list\mix n.* 1))]])
       ($_ _.and
           (_.for [/.Mixin]
                  ($_ _.and
diff --git a/stdlib/source/test/lux/control/parser/binary.lux b/stdlib/source/test/lux/control/parser/binary.lux
index dcf4d0e80..a3c20dbde 100644
--- a/stdlib/source/test/lux/control/parser/binary.lux
+++ b/stdlib/source/test/lux/control/parser/binary.lux
@@ -54,8 +54,8 @@
 (def: (utf8_conversion_does_not_alter? value)
   (Predicate Text)
   (|> value
-      (\ utf8.codec encode)
-      (\ utf8.codec decode)
+      (\ utf8.codec encoded)
+      (\ utf8.codec decoded)
       (case> (#try.Success converted)
              (text\= value converted)
              
@@ -148,7 +148,7 @@
   (`` ($_ _.and
           (~~ (template [<parser> <format>]
                 [(do {! random.monad}
-                   [expected (\ ! map (\ utf8.codec encode) (random.ascii ..segment_size))]
+                   [expected (\ ! map (\ utf8.codec encoded) (random.ascii ..segment_size))]
                    (_.cover [<parser> <format>]
                             (|> (format.result <format> expected)
                                 (/.result <parser>)
@@ -329,14 +329,14 @@
                            (/.result /.any)
                            (!expect (#try.Success _))))
               (do {! random.monad}
-                [data (\ ! map (\ utf8.codec encode) (random.ascii ..segment_size))]
+                [data (\ ! map (\ utf8.codec encoded) (random.ascii ..segment_size))]
                 (_.cover [/.binary_was_not_fully_read]
                          (|> data
                              (/.result /.any)
                              (!expect (^multi (#try.Failure error)
                                               (exception.match? /.binary_was_not_fully_read error))))))
               (do {! random.monad}
-                [expected (\ ! map (\ utf8.codec encode) (random.ascii ..segment_size))]
+                [expected (\ ! map (\ utf8.codec encoded) (random.ascii ..segment_size))]
                 (_.cover [/.segment format.segment format.result]
                          (|> expected
                              (format.result (format.segment ..segment_size))
@@ -344,7 +344,7 @@
                              (!expect (^multi (#try.Success actual)
                                               (\ binary.equivalence = expected actual))))))
               (do {! random.monad}
-                [data (\ ! map (\ utf8.codec encode) (random.ascii ..segment_size))]
+                [data (\ ! map (\ utf8.codec encoded) (random.ascii ..segment_size))]
                 (_.cover [/.end?]
                          (|> data
                              (/.result (do <>.monad
@@ -356,7 +356,7 @@
                              (!expect (#try.Success #1)))))
               (do {! random.monad}
                 [to_read (\ ! map (n.% (++ ..segment_size)) random.nat)
-                 data (\ ! map (\ utf8.codec encode) (random.ascii ..segment_size))]
+                 data (\ ! map (\ utf8.codec encoded) (random.ascii ..segment_size))]
                 (_.cover [/.Offset /.offset]
                          (|> data
                              (/.result (do <>.monad
@@ -371,7 +371,7 @@
                              (!expect (#try.Success #1)))))
               (do {! random.monad}
                 [to_read (\ ! map (n.% (++ ..segment_size)) random.nat)
-                 data (\ ! map (\ utf8.codec encode) (random.ascii ..segment_size))]
+                 data (\ ! map (\ utf8.codec encoded) (random.ascii ..segment_size))]
                 (_.cover [/.remaining]
                          (|> data
                              (/.result (do <>.monad
diff --git a/stdlib/source/test/lux/control/parser/cli.lux b/stdlib/source/test/lux/control/parser/cli.lux
index 529986ad4..9c1247775 100644
--- a/stdlib/source/test/lux/control/parser/cli.lux
+++ b/stdlib/source/test/lux/control/parser/cli.lux
@@ -31,7 +31,7 @@
   (<| (_.covering /._)
       (_.for [/.Parser])
       (do {! random.monad}
-        [expected (\ ! map n\encode random.nat)
+        [expected (\ ! map n\encoded random.nat)
          .let [random_dummy (random.only (|>> (text\= expected) not)
                                          (random.unicode 5))]
          dummy random_dummy
@@ -45,10 +45,10 @@
                          (!expect (^multi (#try.Success actual)
                                           (text\= expected actual)))))
             (_.cover [/.parse]
-                     (|> (/.result (/.parse n\decode) (list expected))
+                     (|> (/.result (/.parse n\decoded) (list expected))
                          (!expect (^multi (#try.Success actual)
                                           (text\= expected
-                                                  (n\encode actual))))))
+                                                  (n\encoded actual))))))
             (_.cover [/.this]
                      (and (|> (/.result (/.this expected) (list expected))
                               (!expect (#try.Success _)))
diff --git a/stdlib/source/test/lux/control/parser/text.lux b/stdlib/source/test/lux/control/parser/text.lux
index 951bed82e..b3767ab01 100644
--- a/stdlib/source/test/lux/control/parser/text.lux
+++ b/stdlib/source/test/lux/control/parser/text.lux
@@ -100,19 +100,19 @@
         [expected (\ ! map (n.% 10) random.nat)
          invalid (random.char (unicode.set [unicode/block.number_forms (list)]))]
         (_.cover [/.decimal]
-                 (and (..should_pass (\ n.decimal encode expected) /.decimal)
+                 (and (..should_pass (\ n.decimal encoded expected) /.decimal)
                       (..should_fail (text.of_char invalid) /.decimal))))
       (do {! random.monad}
         [expected (\ ! map (n.% 8) random.nat)
          invalid (random.char (unicode.set [unicode/block.number_forms (list)]))]
         (_.cover [/.octal]
-                 (and (..should_pass (\ n.octal encode expected) /.octal)
+                 (and (..should_pass (\ n.octal encoded expected) /.octal)
                       (..should_fail (text.of_char invalid) /.octal))))
       (do {! random.monad}
         [expected (\ ! map (n.% 16) random.nat)
          invalid (random.char (unicode.set [unicode/block.number_forms (list)]))]
         (_.cover [/.hexadecimal]
-                 (and (..should_pass (\ n.hex encode expected) /.hexadecimal)
+                 (and (..should_pass (\ n.hex encoded expected) /.hexadecimal)
                       (..should_fail (text.of_char invalid) /.hexadecimal))))
       (do {! random.monad}
         [expected (random.char unicode.ascii/alpha)
@@ -210,26 +210,26 @@
   (let [octal! (/.one_of! "01234567")]
     ($_ _.and
         (do {! random.monad}
-          [left (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)
-           right (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)
+          [left (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)
+           right (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)
            .let [expected (format left right)]
            invalid (|> random.nat
                        (\ ! map (n.% 16))
                        (random.only (n.>= 8))
-                       (\ ! map (\ n.hex encode)))]
+                       (\ ! map (\ n.hex encoded)))]
           (_.cover [/.many /.many!]
                    (and (..should_pass expected (/.many /.octal))
                         (..should_fail invalid (/.many /.octal))
 
                         (..should_pass! expected (/.many! octal!)))))
         (do {! random.monad}
-          [left (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)
-           right (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)
+          [left (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)
+           right (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)
            .let [expected (format left right)]
            invalid (|> random.nat
                        (\ ! map (n.% 16))
                        (random.only (n.>= 8))
-                       (\ ! map (\ n.hex encode)))]
+                       (\ ! map (\ n.hex encoded)))]
           (_.cover [/.some /.some!]
                    (and (..should_pass expected (/.some /.octal))
                         (..should_pass "" (/.some /.octal))
@@ -238,7 +238,7 @@
                         (..should_pass! expected (/.some! octal!))
                         (..should_pass! "" (/.some! octal!)))))
         (do {! random.monad}
-          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)]
+          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)]
            first octal
            second octal
            third octal]
@@ -251,7 +251,7 @@
                         (..should_fail (format first second third) (/.exactly! 2 octal!))
                         (..should_fail (format first) (/.exactly! 2 octal!)))))
         (do {! random.monad}
-          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)]
+          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)]
            first octal
            second octal
            third octal]
@@ -264,7 +264,7 @@
                         (..should_pass! (format first) (/.at_most! 2 octal!))
                         (..should_fail (format first second third) (/.at_most! 2 octal!)))))
         (do {! random.monad}
-          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)]
+          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)]
            first octal
            second octal
            third octal]
@@ -277,7 +277,7 @@
                         (..should_pass! (format first second third) (/.at_least! 2 octal!))
                         (..should_fail (format first) (/.at_least! 2 octal!)))))
         (do {! random.monad}
-          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)]
+          [.let [octal (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)]
            first octal
            second octal
            third octal]
@@ -389,7 +389,7 @@
                                      (/.this output)))
                          (!expect (#try.Success _)))))
           (do {! random.monad}
-            [expected (\ ! map (|>> (n.% 8) (\ n.octal encode)) random.nat)]
+            [expected (\ ! map (|>> (n.% 8) (\ n.octal encoded)) random.nat)]
             (_.cover [/.then]
                      (|> (list (code.text expected))
                          (<c>.result (/.then /.octal <c>.text))
diff --git a/stdlib/source/test/lux/data/binary.lux b/stdlib/source/test/lux/data/binary.lux
index 331e05142..9d843b540 100644
--- a/stdlib/source/test/lux/data/binary.lux
+++ b/stdlib/source/test/lux/data/binary.lux
@@ -93,7 +93,7 @@
                    (_.for [/.monoid]
                           ($monoid.spec /.equivalence /.monoid (..random size)))
                    (_.cover [/.aggregate]
-                            (n.= (\ list.fold fold n.+ 0 (..as_list sample))
+                            (n.= (\ list.mix mix n.+ 0 (..as_list sample))
                                  (/.aggregate n.+ 0 sample)))
                    
                    (_.cover [/.empty]
@@ -142,7 +142,7 @@
                                    false
 
                                    (#.Item head tail)
-                                   (n.= (list.fold n.+ 0 tail)
+                                   (n.= (list.mix n.+ 0 tail)
                                         (/.aggregate n.+ 0 (/.after 1 sample))))))
                    (_.cover [/.copy]
                             (and (case (/.copy size 0 sample 0 (/.empty size))
diff --git a/stdlib/source/test/lux/data/collection/array.lux b/stdlib/source/test/lux/data/collection/array.lux
index 4045c008a..c7fad1619 100644
--- a/stdlib/source/test/lux/data/collection/array.lux
+++ b/stdlib/source/test/lux/data/collection/array.lux
@@ -7,7 +7,7 @@
      [\\specification
       ["$." equivalence]
       ["$." monoid]
-      ["$." fold]
+      ["$." mix]
       ["$." functor (#+ Injection)]]]
     [control
      ["." maybe]]
@@ -43,8 +43,8 @@
                ($monoid.spec (/.equivalence n.equivalence) /.monoid (random.array size random.nat)))
         (_.for [/.functor]
                ($functor.spec ..injection /.equivalence /.functor))
-        (_.for [/.fold]
-               ($fold.spec ..injection /.equivalence /.fold))
+        (_.for [/.mix]
+               ($mix.spec ..injection /.equivalence /.mix))
         )))
 
 (def: search
diff --git a/stdlib/source/test/lux/data/collection/list.lux b/stdlib/source/test/lux/data/collection/list.lux
index f635eca05..41139da07 100644
--- a/stdlib/source/test/lux/data/collection/list.lux
+++ b/stdlib/source/test/lux/data/collection/list.lux
@@ -9,7 +9,7 @@
       ["$." equivalence]
       ["$." hash]
       ["$." monoid]
-      ["$." fold]
+      ["$." mix]
       ["$." functor]
       ["$." apply]
       ["$." monad]]]
@@ -56,8 +56,8 @@
                  ($hash.spec (/.hash n.hash))))
       (_.for [/.monoid]
              ($monoid.spec (/.equivalence n.equivalence) /.monoid ..random))
-      (_.for [/.fold]
-             ($fold.spec /\in /.equivalence /.fold))
+      (_.for [/.mix]
+             ($mix.spec /\in /.equivalence /.mix))
       (_.for [/.functor]
              ($functor.spec /\in /.equivalence /.functor))
       (_.for [/.apply]
@@ -355,7 +355,7 @@
         choose (: (-> Nat (Maybe Text))
                   (function (_ value)
                     (if (n.even? value)
-                      (#.Some (\ n.decimal encode value))
+                      (#.Some (\ n.decimal encoded value))
                       #.None)))]
     (do {! random.monad}
       [sample ..random]
@@ -363,7 +363,7 @@
           (_.cover [/.one]
                    (case [(|> sample
                               (/.only n.even?)
-                              (/\map (\ n.decimal encode))
+                              (/\map (\ n.decimal encoded))
                               /.head)
                           (/.one choose sample)]
                      [(#.Some expected) (#.Some actual)]
@@ -378,7 +378,7 @@
                    (\ (/.equivalence text.equivalence) =
                       (|> sample
                           (/.only n.even?)
-                          (/\map (\ n.decimal encode)))
+                          (/\map (\ n.decimal encoded)))
                       (/.all choose sample)))
           (_.cover [/.example]
                    (case (/.example n.even? sample)
@@ -422,11 +422,11 @@
                                                     (#.Some (++ index))
                                                     #.None))
                                                 0)))))
-              (_.cover [/.aggregates]
+              (_.cover [/.mixes]
                        (/\= (/\map (function (_ index)
-                                     (\ /.fold fold n.+ 0 (/.first index sample)))
+                                     (\ /.mix mix n.+ 0 (/.first index sample)))
                                    (/.indices (++ (/.size sample))))
-                            (/.aggregates n.+ 0 sample)))
+                            (/.mixes n.+ 0 sample)))
               (do random.monad
                 [expected random.nat
                  .let [(^open "/\.") (/.equivalence n.equivalence)]]
diff --git a/stdlib/source/test/lux/data/collection/queue/priority.lux b/stdlib/source/test/lux/data/collection/queue/priority.lux
index 9be7c183f..1e199d23e 100644
--- a/stdlib/source/test/lux/data/collection/queue/priority.lux
+++ b/stdlib/source/test/lux/data/collection/queue/priority.lux
@@ -19,12 +19,12 @@
   (-> Nat (Random (Queue Nat)))
   (do {! random.monad}
     [inputs (random.list size random.nat)]
-    (monad.fold ! (function (_ head tail)
-                    (do !
-                      [priority random.nat]
-                      (in (/.end priority head tail))))
-                /.empty
-                inputs)))
+    (monad.mix ! (function (_ head tail)
+                   (do !
+                     [priority random.nat]
+                     (in (/.end priority head tail))))
+               /.empty
+               inputs)))
 
 (def: .public test
   Test
diff --git a/stdlib/source/test/lux/data/collection/row.lux b/stdlib/source/test/lux/data/collection/row.lux
index 8e8348617..a8ff3a7ab 100644
--- a/stdlib/source/test/lux/data/collection/row.lux
+++ b/stdlib/source/test/lux/data/collection/row.lux
@@ -7,7 +7,7 @@
      [\\specification
       ["$." equivalence]
       ["$." monoid]
-      ["$." fold]
+      ["$." mix]
       ["$." functor (#+ Injection)]
       ["$." apply]
       ["$." monad]]]
@@ -17,7 +17,7 @@
     [data
      ["." bit ("#\." equivalence)]
      [collection
-      ["." list ("#\." fold)]
+      ["." list ("#\." mix)]
       ["." set]]]
     [math
      ["." random]
@@ -35,8 +35,8 @@
                ($equivalence.spec (/.equivalence n.equivalence) (random.row size random.nat)))
         (_.for [/.monoid]
                ($monoid.spec (/.equivalence n.equivalence) /.monoid (random.row size random.nat)))
-        (_.for [/.fold]
-               ($fold.spec /\in /.equivalence /.fold))
+        (_.for [/.mix]
+               ($mix.spec /\in /.equivalence /.mix))
         (_.for [/.functor]
                ($functor.spec /\in /.equivalence /.functor))
         (_.for [/.apply]
diff --git a/stdlib/source/test/lux/data/collection/set/multi.lux b/stdlib/source/test/lux/data/collection/set/multi.lux
index 4ca359ddb..0afe973ef 100644
--- a/stdlib/source/test/lux/data/collection/set/multi.lux
+++ b/stdlib/source/test/lux/data/collection/set/multi.lux
@@ -13,7 +13,7 @@
      ["." bit ("#\." equivalence)]
      [collection
       ["." set]
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      ["." random (#+ Random)]
      [number
@@ -30,11 +30,11 @@
   (do {! random.monad}
     [elements (random.set hash size element)
      element_counts (random.list size ..count)]
-    (in (list\fold (function (_ [count element] set)
-                     (/.has count element set))
-                   (/.empty hash)
-                   (list.zipped/2 element_counts
-                                  (set.list elements))))))
+    (in (list\mix (function (_ [count element] set)
+                    (/.has count element set))
+                  (/.empty hash)
+                  (list.zipped/2 element_counts
+                                 (set.list elements))))))
 
 (def: signature
   Test
diff --git a/stdlib/source/test/lux/data/collection/tree.lux b/stdlib/source/test/lux/data/collection/tree.lux
index 986ef566e..be610c25d 100644
--- a/stdlib/source/test/lux/data/collection/tree.lux
+++ b/stdlib/source/test/lux/data/collection/tree.lux
@@ -6,12 +6,12 @@
      ["." monad (#+ do)]
      [\\specification
       ["$." equivalence]
-      ["$." fold]
+      ["$." mix]
       ["$." functor]]]
     [data
      ["." product]
      [collection
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      ["." random (#+ Random)]
      [number
@@ -27,7 +27,7 @@
      children (random.list num_children (tree gen_value))]
     (in [(|> children
              (list\map product.left)
-             (list\fold n.+ 1))
+             (list\mix n.+ 1))
          {#/.value value
           #/.children (list\map product.right children)}])))
 
@@ -40,8 +40,8 @@
                  (|> (..tree random.nat)
                      (\ random.monad map product.right)
                      ($equivalence.spec (/.equivalence n.equivalence))))
-          (_.for [/.fold]
-                 ($fold.spec /.leaf /.equivalence /.fold))
+          (_.for [/.mix]
+                 ($mix.spec /.leaf /.equivalence /.mix))
           (_.for [/.functor]
                  ($functor.spec /.leaf /.equivalence /.functor))
           
diff --git a/stdlib/source/test/lux/data/collection/tree/finger.lux b/stdlib/source/test/lux/data/collection/tree/finger.lux
index 370a39a53..53631edbf 100644
--- a/stdlib/source/test/lux/data/collection/tree/finger.lux
+++ b/stdlib/source/test/lux/data/collection/tree/finger.lux
@@ -9,7 +9,7 @@
     [data
      ["." text ("#\." equivalence monoid)]
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      ["." random]
      [number
@@ -86,10 +86,10 @@
                values/H random.nat
                values/T (random.list 5 random.nat)]
               (_.cover [/.tags /.values]
-                       (let [tree (list\fold (function (_ [tag value] tree)
-                                               (\ builder branch tree (\ builder leaf tag value)))
-                                             (\ builder leaf tags/H values/H)
-                                             (list.zipped/2 tags/T values/T))]
+                       (let [tree (list\mix (function (_ [tag value] tree)
+                                              (\ builder branch tree (\ builder leaf tag value)))
+                                            (\ builder leaf tags/H values/H)
+                                            (list.zipped/2 tags/T values/T))]
                          (and (\ tags_equivalence = (list& tags/H tags/T) (/.tags tree))
                               (\ values_equivalence = (list& values/H values/T) (/.values tree))))))
             (_.cover [/.one]
diff --git a/stdlib/source/test/lux/data/format/json.lux b/stdlib/source/test/lux/data/format/json.lux
index 33b2622f4..9e5a03843 100644
--- a/stdlib/source/test/lux/data/format/json.lux
+++ b/stdlib/source/test/lux/data/format/json.lux
@@ -84,7 +84,7 @@
                 (_.cover [/.format]
                          (|> expected
                              /.format
-                             (\ /.codec decode)
+                             (\ /.codec decoded)
                              (try\map (\= expected))
                              (try.else false))))
               (do random.monad
diff --git a/stdlib/source/test/lux/data/format/tar.lux b/stdlib/source/test/lux/data/format/tar.lux
index 9bed1f5ed..7a84f12fd 100644
--- a/stdlib/source/test/lux/data/format/tar.lux
+++ b/stdlib/source/test/lux/data/format/tar.lux
@@ -22,7 +22,7 @@
        ["#/." block]]]
      [collection
       ["." row]
-      ["." list ("#\." fold)]]
+      ["." list ("#\." mix)]]
      ["." format #_
       ["#" binary]]]
     [time
@@ -165,7 +165,7 @@
      .let [content (|> chunk
                        (list.repeated chunks)
                        text.together
-                       (\ utf8.codec encode))]]
+                       (\ utf8.codec encoded))]]
     (`` ($_ _.and
             (~~ (template [<type> <tag>]
                   [(_.cover [<type>]
@@ -245,7 +245,7 @@
          (do {! random.monad}
            [path (random.ascii/lower 10)
             modes (random.list 4 ..random_mode)
-            .let [expected_mode (list\fold /.and /.none modes)]]
+            .let [expected_mode (list\mix /.and /.none modes)]]
            (`` ($_ _.and
                    (_.cover [/.and]
                             (|> (do try.monad
diff --git a/stdlib/source/test/lux/data/name.lux b/stdlib/source/test/lux/data/name.lux
index 2856d3476..0a882efaf 100644
--- a/stdlib/source/test/lux/data/name.lux
+++ b/stdlib/source/test/lux/data/name.lux
@@ -52,7 +52,7 @@
                                  (let [(^open "/\.") /.codec]
                                    (_.test "Encoding an name without a module component results in text equal to the short of the name."
                                            (if (text.empty? module1)
-                                             (text\= short1 (/\encode name1))
+                                             (text\= short1 (/\encoded name1))
                                              #1)))))
                    
                    (_.cover [/.module /.short]
diff --git a/stdlib/source/test/lux/data/text/encoding.lux b/stdlib/source/test/lux/data/text/encoding.lux
index 432e98257..ca28e316d 100644
--- a/stdlib/source/test/lux/data/text/encoding.lux
+++ b/stdlib/source/test/lux/data/text/encoding.lux
@@ -12,7 +12,7 @@
     [data
      ["." text ("#\." equivalence)]
      [collection
-      ["." list ("#\." fold)]
+      ["." list ("#\." mix)]
       ["." set]]]
     [macro
      ["." template]]
@@ -193,10 +193,10 @@
     (list.together (list <named>)))
   
   (def: unique_encodings
-    (list\fold (function (_ encoding set)
-                 (set.has (/.name encoding) set))
-               (set.empty text.hash)
-               ..all_encodings))
+    (list\mix (function (_ encoding set)
+                (set.has (/.name encoding) set))
+              (set.empty text.hash)
+              ..all_encodings))
 
   (def: verdict
     (n.= (list.size ..all_encodings)
diff --git a/stdlib/source/test/lux/data/text/escape.lux b/stdlib/source/test/lux/data/text/escape.lux
index 707a06996..49b125cba 100644
--- a/stdlib/source/test/lux/data/text/escape.lux
+++ b/stdlib/source/test/lux/data/text/escape.lux
@@ -138,7 +138,7 @@
                            (\ ! map (n.% (hex "1000"))))
              code (|> (random.unicode 4)
                       (random.only (function (_ code)
-                                     (case (\ n.hex decode code)
+                                     (case (\ n.hex decoded code)
                                        (#try.Failure error) true
                                        (#try.Success _) false))))]
             (_.cover [/.invalid_unicode_escape]
@@ -149,7 +149,7 @@
 
                                        (#try.Failure error)
                                        (exception.match? /.invalid_unicode_escape error))]]
-                       (and (!invalid (\ n.hex encode too_short))
+                       (and (!invalid (\ n.hex encoded too_short))
                             (!invalid code)))))
           (_.cover [/.literal]
                    (with_expansions [<example> (..static_sample)]
diff --git a/stdlib/source/test/lux/data/text/format.lux b/stdlib/source/test/lux/data/text/format.lux
index 24746c45d..cbeedd65a 100644
--- a/stdlib/source/test/lux/data/text/format.lux
+++ b/stdlib/source/test/lux/data/text/format.lux
@@ -76,7 +76,7 @@
                 [(do random.monad
                    [sample <random>]
                    (_.cover [<format>]
-                            (text\= (\ <codec> encode sample)
+                            (text\= (\ <codec> encoded sample)
                                     (<format> sample))))]
 
                 [/.bit bit.codec random.bit]
@@ -180,6 +180,6 @@
                  sample (\ ! map (modular.modular modulus)
                            random.int)]
                 (_.cover [/.mod]
-                         (text\= (\ (modular.codec modulus) encode sample)
+                         (text\= (\ (modular.codec modulus) encoded sample)
                                  (/.mod sample))))
               ))))
diff --git a/stdlib/source/test/lux/locale/language.lux b/stdlib/source/test/lux/locale/language.lux
index e6ded5090..b8ac893fd 100644
--- a/stdlib/source/test/lux/locale/language.lux
+++ b/stdlib/source/test/lux/locale/language.lux
@@ -13,7 +13,7 @@
      ["." text]
      [collection
       ["." set (#+ Set)]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      ["." template]]
     [math
@@ -188,29 +188,29 @@
                (Hash a)
                (List Bundle)
                [Nat (Set a)]))
-  (list\fold (function (_ bundle [amount set])
-               [(n.+ amount (value@ #amount bundle))
-                (set.union set (lens bundle))])
-             [0 (set.empty hash)]
-             territories))
+  (list\mix (function (_ bundle [amount set])
+              [(n.+ amount (value@ #amount bundle))
+               (set.union set (lens bundle))])
+            [0 (set.empty hash)]
+            territories))
 
 (def: languages_test
   Test
   (|> ..languages
       list.reversed
       (list\map (value@ #test))
-      (list\fold _.and
-                 (`` ($_ _.and
-                         (~~ (template [<lens> <tag> <hash>]
-                               [(let [[amount set] (..aggregate (value@ <tag>) <hash> ..languages)]
-                                  (_.cover [<lens>]
-                                           (n.= amount (set.size set))))]
+      (list\mix _.and
+                (`` ($_ _.and
+                        (~~ (template [<lens> <tag> <hash>]
+                              [(let [[amount set] (..aggregate (value@ <tag>) <hash> ..languages)]
+                                 (_.cover [<lens>]
+                                          (n.= amount (set.size set))))]
 
-                               [/.name #names text.hash]
-                               [/.code #codes text.hash]
-                               [/.equivalence #languages /.hash]
-                               ))
-                         )))))
+                              [/.name #names text.hash]
+                              [/.code #codes text.hash]
+                              [/.equivalence #languages /.hash]
+                              ))
+                        )))))
 
 (template: (!aliases <reference> <aliases>)
   [(_.cover <aliases>
diff --git a/stdlib/source/test/lux/locale/territory.lux b/stdlib/source/test/lux/locale/territory.lux
index d25308c49..b8a36d4fd 100644
--- a/stdlib/source/test/lux/locale/territory.lux
+++ b/stdlib/source/test/lux/locale/territory.lux
@@ -13,7 +13,7 @@
      ["." text]
      [collection
       ["." set (#+ Set)]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [macro
      ["." template]]
     [math
@@ -143,31 +143,31 @@
                (Hash a)
                (List Bundle)
                [Nat (Set a)]))
-  (list\fold (function (_ bundle [amount set])
-               [(n.+ amount (value@ #amount bundle))
-                (set.union set (lens bundle))])
-             [0 (set.empty hash)]
-             territories))
+  (list\mix (function (_ bundle [amount set])
+              [(n.+ amount (value@ #amount bundle))
+               (set.union set (lens bundle))])
+            [0 (set.empty hash)]
+            territories))
 
 (def: territories_test
   Test
   (|> ..territories
       list.reversed
       (list\map (value@ #test))
-      (list\fold _.and
-                 (`` ($_ _.and
-                         (~~ (template [<lens> <tag> <hash>]
-                               [(let [[amount set] (..aggregate (value@ <tag>) <hash> ..territories)]
-                                  (_.cover [<lens>]
-                                           (n.= amount (set.size set))))]
+      (list\mix _.and
+                (`` ($_ _.and
+                        (~~ (template [<lens> <tag> <hash>]
+                              [(let [[amount set] (..aggregate (value@ <tag>) <hash> ..territories)]
+                                 (_.cover [<lens>]
+                                          (n.= amount (set.size set))))]
 
-                               [/.name #names text.hash]
-                               [/.short_code #shorts text.hash]
-                               [/.long_code #longs text.hash]
-                               [/.numeric_code #numbers n.hash]
-                               [/.equivalence #territories /.hash]
-                               ))
-                         )))))
+                              [/.name #names text.hash]
+                              [/.short_code #shorts text.hash]
+                              [/.long_code #longs text.hash]
+                              [/.numeric_code #numbers n.hash]
+                              [/.equivalence #territories /.hash]
+                              ))
+                        )))))
 
 (template: (!aliases <reference> <aliases>)
   [(_.cover <aliases>
diff --git a/stdlib/source/test/lux/math/modular.lux b/stdlib/source/test/lux/math/modular.lux
index b87f30bb1..ce10c6ca2 100644
--- a/stdlib/source/test/lux/math/modular.lux
+++ b/stdlib/source/test/lux/math/modular.lux
@@ -64,8 +64,8 @@
 
                 (_.cover [/.incorrect_modulus]
                          (case (|> param
-                                   (\ (/.codec param\\%) encode)
-                                   (\ (/.codec subject\\%) decode))
+                                   (\ (/.codec param\\%) encoded)
+                                   (\ (/.codec subject\\%) decoded))
                            (#try.Failure error)
                            (exception.match? /.incorrect_modulus error)
                            
diff --git a/stdlib/source/test/lux/math/number.lux b/stdlib/source/test/lux/math/number.lux
index 8a298338f..08a044d60 100644
--- a/stdlib/source/test/lux/math/number.lux
+++ b/stdlib/source/test/lux/math/number.lux
@@ -34,7 +34,7 @@
       ($_ _.and
           (_.cover [/.bin]
                    (`` (and (~~ (template [<=> <codec> <number>]
-                                  [(case (\ <codec> decode (..clean_commas <number>))
+                                  [(case (\ <codec> decoded (..clean_commas <number>))
                                      (#try.Success actual)
                                      (<=> (/.bin <number>) actual)
 
@@ -55,7 +55,7 @@
                                   )))))
           (_.cover [/.oct]
                    (`` (and (~~ (template [<=> <codec> <number>]
-                                  [(case (\ <codec> decode (..clean_commas <number>))
+                                  [(case (\ <codec> decoded (..clean_commas <number>))
                                      (#try.Success actual)
                                      (<=> (/.oct <number>) actual)
 
@@ -76,7 +76,7 @@
                                   )))))
           (_.cover [/.hex]
                    (`` (and (~~ (template [<=> <codec> <number>]
-                                  [(case (\ <codec> decode (..clean_commas <number>))
+                                  [(case (\ <codec> decoded (..clean_commas <number>))
                                      (#try.Success actual)
                                      (<=> (/.hex <number>) actual)
 
diff --git a/stdlib/source/test/lux/math/number/i64.lux b/stdlib/source/test/lux/math/number/i64.lux
index ac82addce..4692a646c 100644
--- a/stdlib/source/test/lux/math/number/i64.lux
+++ b/stdlib/source/test/lux/math/number/i64.lux
@@ -142,7 +142,7 @@
                ($_ _.and
                    ($equivalence.spec (\ sub &equivalence) (random (\ sub narrow)))
                    (_.cover [/.sub]
-                            (let [actual (|> expected .i64 (\ sub narrow) (\ sub widen))]
+                            (let [actual (|> expected .i64 (\ sub narrow) (\ sub wide))]
                               (\= expected actual)))
                    ))))))
 
diff --git a/stdlib/source/test/lux/time.lux b/stdlib/source/test/lux/time.lux
index 671afe39d..81c56089d 100644
--- a/stdlib/source/test/lux/time.lux
+++ b/stdlib/source/test/lux/time.lux
@@ -75,7 +75,7 @@
                                       %.nat
                                       (text.prefix <prefix>)
                                       (text.suffix <suffix>)
-                                      (\ /.codec decode)
+                                      (\ /.codec decoded)
                                       (case> (#try.Success _) true
                                              (#try.Failure error) false))
                                   
@@ -84,7 +84,7 @@
                                       %.nat
                                       (text.prefix <prefix>)
                                       (text.suffix <suffix>)
-                                      (\ /.codec decode)
+                                      (\ /.codec decoded)
                                       (case> (#try.Success _)
                                              false
                                              
@@ -101,7 +101,7 @@
                      (|> valid_milli_second
                          %.nat
                          (format "00:00:00.")
-                         (\ /.codec decode)
+                         (\ /.codec decoded)
                          (case> (#try.Success _) true
                                 (#try.Failure error) false)))
             ))))
@@ -138,7 +138,7 @@
                              (n.= 0)))
                 (_.cover [/.parser]
                          (|> expected
-                             (\ /.codec encode)
+                             (\ /.codec encoded)
                              (<text>.result /.parser)
                              (try\map (\ /.equivalence = expected))
                              (try.else false)))
diff --git a/stdlib/source/test/lux/time/date.lux b/stdlib/source/test/lux/time/date.lux
index 70bb0a93e..87e54e623 100644
--- a/stdlib/source/test/lux/time/date.lux
+++ b/stdlib/source/test/lux/time/date.lux
@@ -72,7 +72,7 @@
           (do random.monad
             [expected random.date]
             (_.cover [/.parser]
-                     (|> (\ /.codec encode expected)
+                     (|> (\ /.codec encoded expected)
                          (<text>.result /.parser)
                          (try\map (\ /.equivalence = expected))
                          (try.else false))))
diff --git a/stdlib/source/test/lux/time/day.lux b/stdlib/source/test/lux/time/day.lux
index dd71f0f93..462a96939 100644
--- a/stdlib/source/test/lux/time/day.lux
+++ b/stdlib/source/test/lux/time/day.lux
@@ -59,7 +59,7 @@
             (do random.monad
               [not_a_day (random.ascii/upper 1)]
               (_.cover [/.not_a_day_of_the_week]
-                       (case (\ /.codec decode not_a_day)
+                       (case (\ /.codec decoded not_a_day)
                          (#try.Failure error)
                          (exception.match? /.not_a_day_of_the_week error)
                          
diff --git a/stdlib/source/test/lux/time/instant.lux b/stdlib/source/test/lux/time/instant.lux
index a7659421a..b9b2996e6 100644
--- a/stdlib/source/test/lux/time/instant.lux
+++ b/stdlib/source/test/lux/time/instant.lux
@@ -15,7 +15,7 @@
      ["." io]]
     [data
      [collection
-      ["." list ("#\." fold)]]]
+      ["." list ("#\." mix)]]]
     [math
      ["." random]]
     [time
@@ -71,9 +71,9 @@
             (_.cover [/.day_of_week]
                      (let [apply (: (-> (-> Duration Duration) (-> Day Day) Nat Bit)
                                     (function (_ polarity move steps)
-                                      (let [day_shift (list\fold (function.constant move)
-                                                                 d0
-                                                                 (list.repeated steps []))
+                                      (let [day_shift (list\mix (function.constant move)
+                                                                d0
+                                                                (list.repeated steps []))
                                             instant_shift (|> instant
                                                               (/.after (polarity (duration.up steps duration.day)))
                                                               /.day_of_week)]
diff --git a/stdlib/source/test/lux/time/month.lux b/stdlib/source/test/lux/time/month.lux
index 77a0a9702..7f5487069 100644
--- a/stdlib/source/test/lux/time/month.lux
+++ b/stdlib/source/test/lux/time/month.lux
@@ -17,7 +17,7 @@
     [data
      [collection
       ["." set]
-      ["." list ("#\." functor fold)]]]
+      ["." list ("#\." functor mix)]]]
     [math
      ["." random (#+ Random)]
      [number
@@ -80,18 +80,18 @@
                          (let [expected (.nat (duration.ticks duration.day duration.normal_year))]
                            (|> /.year
                                (list\map /.days)
-                               (list\fold n.+ 0)
+                               (list\mix n.+ 0)
                                (n.= expected))))
                 (_.cover [/.leap_year_days]
                          (let [expected (.nat (duration.ticks duration.day duration.leap_year))]
                            (|> /.year
                                (list\map /.leap_year_days)
-                               (list\fold n.+ 0)
+                               (list\mix n.+ 0)
                                (n.= expected))))
                 (do random.monad
                   [not_a_month (random.ascii/upper 1)]
                   (_.cover [/.not_a_month_of_the_year]
-                           (case (\ /.codec decode not_a_month)
+                           (case (\ /.codec decoded not_a_month)
                              (#try.Failure error)
                              (exception.match? /.not_a_month_of_the_year error)
                              
diff --git a/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/case.lux b/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/case.lux
index b634c0115..f7b169ea3 100644
--- a/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/case.lux
+++ b/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/case.lux
@@ -17,7 +17,7 @@
      ["." rev]
      ["." frac]]
     [collection
-     ["." list ("#\." functor fold monoid)]
+     ["." list ("#\." functor mix monoid)]
      ["." set]]]
    [math
     ["." random (#+ Random)]]]
@@ -127,19 +127,19 @@
       (Random [analysis.Pattern Register]))
   (do random.monad
     [@member random.nat]
-    (in [(list\fold (function (_ member inner)
-                      (case member
-                        (#.Left lefts)
-                        (analysis.pattern/tuple
-                         (list\compose (list.repeated lefts (analysis.pattern/unit))
-                                       (list inner (analysis.pattern/unit))))
-                        
-                        (#.Right lefts)
-                        (analysis.pattern/tuple
-                         (list\compose (list.repeated (++ lefts) (analysis.pattern/unit))
-                                       (list inner)))))
-                    (#analysis.Bind @member)
-                    (list.reversed path))
+    (in [(list\mix (function (_ member inner)
+                     (case member
+                       (#.Left lefts)
+                       (analysis.pattern/tuple
+                        (list\compose (list.repeated lefts (analysis.pattern/unit))
+                                      (list inner (analysis.pattern/unit))))
+                       
+                       (#.Right lefts)
+                       (analysis.pattern/tuple
+                        (list\compose (list.repeated (++ lefts) (analysis.pattern/unit))
+                                      (list inner)))))
+                   (#analysis.Bind @member)
+                   (list.reversed path))
          @member])))
 
 (def: get_test
@@ -297,15 +297,15 @@
                                                                      (list (analysis.pattern/text value)
                                                                            (analysis.pattern/unit)))))
                         #analysis.then (analysis.frac body)}))]]
-    (in [(list\fold (function (_ left right)
-                      (#synthesis.Alt left right))
-                    (path (++ mid_size) true value/last body/last)
-                    (|> (list.zipped/2 value/mid body/mid)
-                        (#.Item [value/first body/first])
-                        list.enumeration
-                        (list\map (function (_ [lefts' [value body]])
-                                    (path lefts' false value body)))
-                        list.reversed))
+    (in [(list\mix (function (_ left right)
+                     (#synthesis.Alt left right))
+                   (path (++ mid_size) true value/last body/last)
+                   (|> (list.zipped/2 value/mid body/mid)
+                       (#.Item [value/first body/first])
+                       list.enumeration
+                       (list\map (function (_ [lefts' [value body]])
+                                   (path lefts' false value body)))
+                       list.reversed))
          [(branch 0 false value/first body/first)
           (list\compose (|> (list.zipped/2 value/mid body/mid)
                             list.enumeration
diff --git a/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/function.lux b/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/function.lux
index a25bd787c..6190c05aa 100644
--- a/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/function.lux
+++ b/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/function.lux
@@ -12,7 +12,7 @@
     [number
      ["n" nat]]
     [collection
-     ["." list ("#\." functor fold monoid)]
+     ["." list ("#\." functor mix monoid)]
      ["." dictionary (#+ Dictionary)]
      ["." set]]]
    [math
@@ -50,16 +50,16 @@
 
 (def: (n_abstraction arity body)
   (-> Arity Analysis Analysis)
-  (list\fold (function (_ arity_1 body)
-               (case arity_1
-                 0 (#analysis.Function (list) body)
-                 _ (#analysis.Function ($_ list\compose
-                                           (list\map (|>> #variable.Foreign)
-                                                     (list.indices arity_1))
-                                           (list (#variable.Local 1)))
-                                       body)))
-             body
-             (list.reversed (list.indices arity))))
+  (list\mix (function (_ arity_1 body)
+              (case arity_1
+                0 (#analysis.Function (list) body)
+                _ (#analysis.Function ($_ list\compose
+                                          (list\map (|>> #variable.Foreign)
+                                                    (list.indices arity_1))
+                                          (list (#variable.Local 1)))
+                                      body)))
+            body
+            (list.reversed (list.indices arity))))
 
 (template: (!expect <pattern> <value>)
   (case <value>
@@ -318,10 +318,10 @@
   (do {! random.monad}
     [resets (random.list arity (..random_variable arity output?))
      [_ expected_output actual_output] (..random_nat output?)]
-    (in [(list\fold (function (_ new old)
-                      (and new old))
-                    true
-                    (list\map product.left resets))
+    (in [(list\mix (function (_ new old)
+                     (and new old))
+                   true
+                   (list\map product.left resets))
          (synthesis.loop/scope
           {#synthesis.start (++ arity)
            #synthesis.inits (list\map (|>> product.right product.left) resets)
@@ -364,10 +364,10 @@
     [[loop?_abstraction expected_abstraction actual_abstraction] (..random_nat output?)
      arity (|> random.nat (\ ! map (|>> (n.% 5) ++)))
      inputs (random.list arity (random_value false))]
-    (in [(list\fold (function (_ new old)
-                      (and new old))
-                    loop?_abstraction
-                    (list\map product.left inputs))
+    (in [(list\mix (function (_ new old)
+                     (and new old))
+                   loop?_abstraction
+                   (list\map product.left inputs))
          (synthesis.function/apply [expected_abstraction
                                     (list\map (|>> product.right product.left) inputs)])
          (analysis.apply [actual_abstraction
diff --git a/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/variable.lux b/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/variable.lux
index 10a6ca270..690ac7ce2 100644
--- a/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/variable.lux
+++ b/stdlib/source/test/lux/tool/compiler/language/lux/phase/synthesis/variable.lux
@@ -15,7 +15,7 @@
     [number
      ["n" nat]]
     [collection
-     ["." list ("#\." functor fold)]
+     ["." list ("#\." functor mix)]
      ["." dictionary (#+ Dictionary)]]]]
   [\\
    ["." /
@@ -244,12 +244,12 @@
      inits (random.list ..scope_arity (scenario context))
      [expected_iteration actual_iteration] (scenario (revised@ #necessary
                                                                (function (_ necessary)
-                                                                 (list\fold (function (_ [idx _] context)
-                                                                              (dictionary.has (n.+ real_start idx)
-                                                                                              (n.+ fake_start idx)
-                                                                                              context))
-                                                                            necessary
-                                                                            (list.enumeration inits)))
+                                                                 (list\mix (function (_ [idx _] context)
+                                                                             (dictionary.has (n.+ real_start idx)
+                                                                                             (n.+ fake_start idx)
+                                                                                             context))
+                                                                           necessary
+                                                                           (list.enumeration inits)))
                                                                context))]
     (in [(synthesis.loop/scope [real_start (list\map product.left inits) expected_iteration])
          (synthesis.loop/scope [fake_start (list\map product.right inits) actual_iteration])])))
diff --git a/stdlib/source/test/lux/type/check.lux b/stdlib/source/test/lux/type/check.lux
index d148e9fdc..12370e87a 100644
--- a/stdlib/source/test/lux/type/check.lux
+++ b/stdlib/source/test/lux/type/check.lux
@@ -421,12 +421,12 @@
                                 [[id/T var/tail] /.var]
                                 (in var/tail)))
                           (list.repeated tail_size /.var))
-     var/last (monad.fold ! (function (_ var/next var/prev)
-                              (do !
-                                [_ (/.check var/prev var/next)]
-                                (in var/next)))
-                          var/head
-                          var/tail+)
+     var/last (monad.mix ! (function (_ var/next var/prev)
+                             (do !
+                               [_ (/.check var/prev var/next)]
+                               (in var/next)))
+                         var/head
+                         var/tail+)
      _ (/.check var/last var/head)]
     (in [var/head var/tail+ var/last])))
 
diff --git a/stdlib/source/test/lux/world/net/http/client.lux b/stdlib/source/test/lux/world/net/http/client.lux
index c9b3f12c9..994e2cbf3 100644
--- a/stdlib/source/test/lux/world/net/http/client.lux
+++ b/stdlib/source/test/lux/world/net/http/client.lux
@@ -57,8 +57,8 @@
                                                #//.Options on_options
                                                #//.Trace on_trace)
                                        data (|> value
-                                                (\ nat.decimal encode)
-                                                (\ utf8.codec encode))]
+                                                (\ nat.decimal encoded)
+                                                (\ utf8.codec encoded))]
                                    (#try.Success [//status.ok
                                                   {#//.headers headers
                                                    #//.body (function (_ ?wanted_bytes)
@@ -71,8 +71,8 @@
                                     (do> try.monad
                                          [io.run!]
                                          [product.right (value@ #//.body) (function.on #.None) io.run!]
-                                         [product.right (\ utf8.codec decode)]
-                                         [(\ nat.decimal decode)]
+                                         [product.right (\ utf8.codec decoded)]
+                                         [(\ nat.decimal decoded)]
                                          [(nat.= <expected>) in])
                                     (try.else false)))]
 
-- 
cgit v1.2.3