Пример в модуле Unix:
val environment : unit -> string array
Почему бы просто:
val environment : string array
?
Потому что он обозначает функцию, которая принимает значение типа unit в качестве параметра. Тип объекта заполняется только значением "()". Обычно это означает, что функция будет выполнять какой-то ввод-вывод или вызывать побочный эффект и не требует ввода. Подпись второго типа, которую вы предоставили, - это подпись для значения, а не для функции, которую можно применить. Если бы какое-то выражение было привязано к этому имени, это выражение было бы вычислено во время привязки значения, а не во время ссылки на него (как в случае с приложением функции).