let (//) = Filename.concat
+let isalpha = function 'a'..'z' | 'A'..'Z' -> true | _ -> false
+let isalnum = function 'a'..'z' | 'A'..'Z' | '0'..'9' -> true | _ -> false
+
let rec filter_map f = function
| [] -> []
| x :: xs ->
| IExpr_app (("change"|"changes"|"changed"|"inc"|"increase"|"increases"|"increased"|"dec"|"decrease"|"decreases"|"decreased"|"prev"|"previous") as op, _) ->
invalid_arg (sprintf "%s: '%s' operator must be followed by a variable name"
- op (Loc.to_string _loc))
+ (Loc.to_string _loc) op)
| IExpr_app (op, _) ->
invalid_arg (sprintf "%s: unknown operator in expression: %s"