 
         // "IF" lhs relop rhs "THEN" statement
         // "IF" lhs relop rhs statement
-        if let ((IF, lhs, op, rhs, THEN, stmt), nextPos) =
+        if let (IF, lhs, op, rhs, THEN, stmt, nextPos) =
             parse(pos, lit(T_IF), expression, relop, expression, optLit(T_THEN), statement)
         {
             return (.If(lhs, op, rhs, Box(stmt)), nextPos)
         }
 
         // "GOTO" expression
-        if let ((GOTO, expr), nextPos) =
+        if let (GOTO, expr, nextPos) =
             parse(pos, oneOfLit(T_GOTO, T_GT), expression)
         {
             return (.Goto(expr), nextPos)
         }
 
         // "GOSUB" expression
-        if let ((GOSUB, expr), nextPos) =
+        if let (GOSUB, expr, nextPos) =
             parse(pos, oneOfLit(T_GOSUB, T_GS), expression)
         {
             return (.Gosub(expr), nextPos)

func parse<A, B> (
    position: InputPosition,
    a: (InputPosition) -> (A, InputPosition)?,
    b: (InputPosition) -> (B, InputPosition)?) -> ((A, B), InputPosition)?
{
    if let (a, afterA) = a(position) {
        if let (b, afterB) = b(afterA) {
            return ((a, b), afterB)
        }
    }
    return nil

    c: (InputPosition) -> (C, InputPosition)?,
    d: (InputPosition) -> (D, InputPosition)?,
    e: (InputPosition) -> (E, InputPosition)?,
    f: (InputPosition) -> (F, InputPosition)?) -> (A, B, C, D, E, F, InputPosition)?
{
    if let (a, afterA) = a(position) {
        if let (b, afterB) = b(afterA) {
