Допустим, у меня есть функция, которая делает что-то довольно сложное, и она реализована с помощью подфункций.Чтобы упростить задачу, вместо кортежей я хотел бы использовать некоторые промежуточные структуры, которые являются частными для реализации этой функции.
Я не хочу, чтобы декларация этих структур просочилась наружу.Итак, я хочу что-то вроде этого:
let someComplexFun p =
type SomeRecord = {i:int; x:int; y:int;}
type SomeOtherRecord = {...}
let innerFunctionA (x:SomeRecord) = ...
let innerFunctionB (x:SomeOtherRecord) = ...
...
Я попробовал это, но, конечно, компилятор не позволяет мне сделать это.Я посмотрел документацию и нигде не вижу, что типы должны быть объявлены на уровне модуля.
Например, в LISP кажется, что все это совершенно законно, например:
(defun foo (when)
(declare (type (member :now :later) when)) ; Type declaration is illustrative and in this case optional.
(ecase when
(:now (something))
(:later (something-else))))
Итак, я что-то упустил?Возможно ли это, если F # вообще?