Given this snippet of OCaml code:
let rec range a b =
if a > b then []
else a :: range (a+1) b
;;
The Repl tells me that it's type is:
val range : int -> int -> int list = <fun>
Giving it inputs such as:
range 0 4;;
gives back the list:
- : int list = [0; 1; 2; 3; 4]
However providing the input
range -4 2;;
Gives the error:
Characters 0-5:
range -4 1;;
^^^^^
This expression has type int -> int -> int list but is here used with type int.
What is this trying to tell me?
when you type,
range -4 2;;
you need to remember that the -
is a function, an infix function, not a unary negation.
To do unary negation you can do one of two things, 1) preceede - sign with a ~, like ~-4, or use parenthesis.