 
 // 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

}

// invert match
public prefix func !(rule: ParserRule) -> ParserRule {
    return {(parser: Parser, reader: Reader) -> Bool in
        return !rule(parser, reader)
    }

    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 res = left(parser, reader) && right(parser, reader)
