Можно ли объявить тип в области видимости функции в F #?

Допустим, у меня есть функция, которая делает что-то довольно сложное, и она реализована с помощью подфункций. Чтобы упростить задачу, вместо кортежей я хотел бы использовать некоторые промежуточные структуры, которые являются частными для реализации этой функции.

Я не хочу, чтобы объявление этих структур просочилось наружу. Итак, я хочу что-то вроде этого:

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 #?

8
задан Tomas Petricek 25 August 2011 в 14:00
поделиться