 /// Rule Compositions
 
 operator prefix  =< {}                                    // Transparent
-operator prefix  =! {}                                    // Transparent
 operator infix   &> { associativity left precedence 40 }  // Conjunction
 operator infix   <! { associativity left precedence 30 }  // Termination & Computation
 operator infix   |> { associativity left precedence 20 }  // Disjunction

        rule(name, parses: .RulePromise(symbol))
    }

    /// Parses the defined grammar starting with the given rule.
    func start (rule: Rule, _ lexer: Lexer)
    -> Result


/// `rule` <! `action`
/// Asserts EOI after parsing the rule, then returns the action's value.
@infix func <! (rule: Parser.Rule, block: Parser.Action)
-> Parser.Rule
{
    return (.Termination([rule]) &> .Computation([block]))
}

@infix func <! (name: String, block: Parser.Action)
-> Parser.Rule
{
    return (.Termination([.RulePromise(name)]) &> .Computation([block]))
}

/// Sequence construction utility for use in rule actions.
