   }
 }
 
-let opFormat = (regex("[+*!?]")) ~> skip
+let opFormat = (regex("[+*!?-]")) ~> skip
 let opp = OperatorPrecedence<Expr>(opFormat.parse)
 
 opp.addOperator("+", .LeftInfix(ExprOp("+").binary, 60))
+opp.addOperator("-", .LeftInfix(ExprOp("-").binary, 60))
 opp.addOperator("*", .RightInfix(ExprOp("*").binary, 70))
 opp.addPrefix("!", Prefix(ExprOp("!").unary, 200))
 opp.addPrefix("?", Prefix(ExprOp("?").unary, 50))

let brackets = oparen >~ opp ~> cparen
let fncall = identifier ~>~ (oparen >~ sepby(opp, comma) ~> cparen) |> Expr.MakeFn

let termParser  = fncall | brackets | leaf
opp.term = termParser.parse

lnprint(cStyle(parse(opp, "foo")!))
lnprint(cStyle(parse(opp, "foo + bar")!))
lnprint(cStyle(parse(opp, "foo + bar + abc")!))
lnprint(cStyle(parse(opp, "foo * bar + abc")!))
lnprint(cStyle(parse(opp, "foo * (bar + abc)")!))
lnprint(cStyle(parse(opp, "foo + bar * abc")!))
lnprint(cStyle(parse(opp, "foo * bar * abc")!))
lnprint(cStyle(parse(opp, "!foo")!))
lnprint(cStyle(parse(opp, "!?foo")!))

lnprint(cStyle(parse(opp, "?foo + bar")!))
lnprint(cStyle(parse(opp, "sqrt(a + b)")!))
lnprint(cStyle(parse(opp, "goo(a + b, c * sqrt(d))")!))
lnprint(cStyle(parse(opp, "foo - -22.9")!))
