~plan/plunder

PLAN.py: add optional tracing
PLAN_SPEC: fix `L` & `B` rules

spec was mismatched w/ `PLAN.py`, which was correct. spec should now
be in agreement.
viceroy: comment pq_vice to avoid breaking CI
viceroy: typecheck #case patterns
viceroy: col rune, bugfixes, pq_vice.sire

Viceroy is getting close to being able to handle pq.sire

This commit starts a temporary hacked-up version of pq.sire
which does not use type-inference and manually annotates
every binding.
viceroy: list literals
viceroy: ^-rune
viceroy: more sensible use of type-representations

Before this commit, there was a pretty significant overlap in the usage
between the `type-machinery.sire` representation and the `Typ` datatype
from Viceroy.

This commit clarify this usage, now Typ becomes `Txp`, which is just a
parse-tree for type expressions.  And the typing engine uses
`type-machinery.sire` types for everything.
seed README tweaks

first 3 are typos. last one is a typo (`d`=>`a`), and adjusting the edge
list for `a`. `a` should not connect to `0` (`d`). edges are
immediate-adjacency, not transitive.
fix A rule PLAN_SPEC.txt
viceroy: letrec, recursive types, _-patterns
viceroy: strict let-bindings

This add supports for bang-patterns in let bindings:

    @ !x/Nat 3
    4
viceroy: more #case validation

- Check exaustivity
- Disallow fallback patterns in exaustive matches.
- Disallow binding multiple fields with the same name.
viceroy: #case looks up metadata, validates

{#case} now lookup up the ADT information about each constructor,
and validates the expression in several ways:

-   Each pattern corresponds to an actual #datatype constructor.

-   All of the patterns are from the same datatype.

-   No two patterns are for the same branch.

-   The number of fields bound on each branch matches the constructor.
viceroy: adt metadata in props, -legible #data

-   Metadata about the shape of each ADT is now stored in the props of
    each constructor.

-   #data now supports the -legible flag.

-   Empty #data declarations are allowed.

-   #data declarations are prevented from having multiple branches with
    the same constructor name.
sire: fix Sire AST mismatch + (vice: #case works)

There were a couple of cases where the noun-representation of Sire ASTs
didn't match the one uses in sire-in-sire:

-   The Haskell version pre-computed whether-or-not each function is
    recursive and saved that on each function (to avoid re-computing
    during inline).  We update the sire code to match.

-   The Haskell version flattened (F (LAM ...)) nodes to [%F ...].
    This was more compact but more complicated to work with.  We update
    the Haskell version to remove the optimization.

-   The Haskell version unpacked variables, so that they are represented
    as `3` instead of `[%V 3]`.  This is more compact and easier to
    read, but more complicated to work with.  We update the Haskell version
    to remove the optimization.

In addition to that, this extends the syntax of Viceroy to support
`#case` expressions.  This is not fully complete, and doesn't yet support
type-checking, but small examples are working.
wip: renovate PLAN_INFORMAL_SPEC
viceroy: codegen for #case
sire: foldrRev, listFromRowRev
viceroy: cleanup
Next