Выражение:
let f = "hello";1;;
Инициирует предупреждение:
this expression should have type unit - around "hello" string.
Это потому, что вы пытаетесь вернуть первое значение через «привет», а затем вы возвращаете 1
это означает, что ocaml должен игнорировать "привет".если вы замените его на unit
- что означает «здесь я ничего не возвращаю», все будет в порядке.
Выражение:
let f = (); 1;;
не вызывает предупреждения, а f
является int
.
Таким образом, вы получаете предупреждение, относящееся к внутреннему коду вашего выражения, а не к типу написанного вами выражения.
let f = "hello";();;
Компилятор предупреждает вас, чтоВы вычисляете что-то, что игнорируете после этого («привет» никогда не используется, и возвращаемое значение равно f
равно ()
).Но, как вы заметили, f
имеет тип unit
.
В utop
:
let _ = try ("hello"; ()) with
| _ -> print_endline "hi";;
Вы получаете:
Characters 13-20:
Warning 10: this expression should have type unit.
, который точно соответствует позиции "hello"
строки - но не расположен к ("hello"; ())
.("hello"; ())
имеет тип единицы, точно так же как print_endline "hi"
.
Предупреждение касается только того факта, что выражение, которое должно быть вместо "hello";
, должно иметь тип unit.