Very interesting, actually when I was using Rust I kind of missed Haskell pattern matching.
Regarding this type Term = union Unittype Ident = string Run This seems "unnatural", a bit similar to Rust Phantom data types, I don't see this syntax in the RFC either, something that you changed midway?