[1,2] is legal but it's not a list of numbers. Precedence (esp , and ;) is surprising [let y = 2 in y; 3]. Nesting match statements (common) can end up with a type error on bad usage.
OCaml similarly requires recursive functions (even if there's only one in a `let ... and ...`) to use `rec`. It's an unusual default today.
Type signatures are completely optional, and the checker looks at your whole program.
This can produce spooky effects. If you call a function inconsistently, OCaml ca assume the first type was correct, even if that produces 100s of errors!