       return false
     }
   }
-}
+
+  public var description: String {
+    switch self {
+    case let .apply(arg):
+      return "\(arg)"
+    case let .projection(proj):
+      return "#\(proj)"
+    }
+  }
+}

}

/// Represents a clause in a pattern.
struct Clause {
  let patterns: [Pattern]
  let body: Body

  /// Represents the body of a clause.
  enum Body {
    /// A function clause may have an empty body if a clause introduces an
    /// absurd pattern.
    case empty



/// Expressions - well-scoped but not necessarily well-formed.
public indirect enum Expr: Equatable, CustomStringConvertible {
  /// An application of a head to a body of eliminators.
  ///
  /// The head may by a local variable or a definition while the eliminators
