ocamltype-systems

Ocaml Int and negative values


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?


Solution

  • 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.