 
 // on match
 infix operator => : MaxPrecedence
-public func => (rule : ParserRule, action: ParserAction) -> ParserRule {
+public func => (rule : @escaping ParserRule, action: @escaping ParserAction) -> ParserRule {
     return {(parser: Parser, reader: Reader) -> Bool in
         let start = reader.position
         let capture_count = parser.captures.count

	return literal(left) ~~ literal(right)
}

public func ~~ (left: String, right: ParserRule) -> ParserRule {
	return literal(left) ~~ right
}

public func ~~ (left: ParserRule, right: String) -> ParserRule {
	return left ~~ literal(right)
}

public func ~~ (left : ParserRule, right: ParserRule) -> ParserRule {
	return {(parser: Parser, reader: Reader) -> Bool in
		return left(parser, reader) && parser.whitespace(parser, reader) && right(parser, reader)
	}
}

/** Parser rule that matches the given parser rule at least once, but possibly more */
public postfix func ++ (left: ParserRule) -> ParserRule {
	return left ~~ left*
}


    return literal(left) | literal(right)
}

public func | (left: String, right: @escaping ParserRule) -> ParserRule {
    return literal(left) | right
}

public func | (left: @escaping ParserRule, right: String) -> ParserRule {
    return left | literal(right)
}

public func | (left: @escaping ParserRule, right: @escaping ParserRule) -> ParserRule {
    return {(parser: Parser, reader: Reader) -> Bool in
        parser.enter("|")
        let pos = reader.position
