     let callargs = %(.Character("(")) *> many(valueExpression) <* %(.Character(")"))
     
     /// call ::= Identifier callargs
-    let call: ValueExpressionParser = CallExpression.init <^> ( lift(pair) <*> identifier <*> callargs )
+    let call: ValueExpressionParser = curry(CallExpression.init) <^> identifier <*> callargs
     
     /// primary
     ///     ::= call

private let prototypeArgs = %(.Character("(")) *> many(identifier) <* %(.Character(")"))

/// prototype ::= Identifier prototypeArgs
private let prototype = PrototypeExpression.init <^> ( lift(pair) <*> identifier <*> prototypeArgs )

/// definition ::= "def" prototype expression
private let definition: TopLevelExpressionParser = FunctionExpression.init <^> ( %(Token.Def) *> lift(pair) <*> prototype <*> valueExpression )

/// external ::= "extern" prototype
private let external: TopLevelExpressionParser = id <^> ( %(Token.Extern) *> prototype )

    ])
    
    /// infixRight ::= infixOperator primary
    let infixRight = curry(pair) <^> infixOperator <*> primary
    
    /// infix ::= primary infixRight*
    let repackedInfix = curry(map(id, ArraySlice.init)) <^> primary <*> many(infixRight)
    let infix: ValueExpressionParser = collapsePackedInfix <^> repackedInfix
    
    /// valueExpression
