Поддерживает ли F # взаимозависимые классы в отдельных файлах?

Я работаю над IronJS, и один из наших исходных файлов становится очень длинным.

Прямо сейчас я пытаюсь получить .NET interop работает. Я добавляю метод TryBinaryOperation к Undefined , чтобы C # мог использовать семантику JavaScript неопределенного значения.

Однако это вводит зависимость от операторов , который вызывает циклическую зависимость.

Runtime.fs:

type BoxedValue() =
    struct
        // Contains IsUndefined and get_Undefined, referencing the Undefined class, below.

...

and type Undefined() =
    inherit DynamicObject()
    ...
    override x.TryBinaryOperation(binder:BinaryOperationBinder, arg:obj, result:obj byref) : bool =
        // Here, we are referencing BoxedValue, above.
        result <- Operators.add(Und, BoxedValue.Box(arg))
        true

...

Operators.fs:

type Operators =
    ...
    // Here, we are referencing BoxedValue.
    static member add(BoxedValue l, BoxedValue r)
        ...

Итак, у нас есть этот набор зависимостей:
BoxedValue->Undefined, Undefined->BoxedValue, Undefined->Operators, Operators->BoxedValue

В идеале мы хотели бы разделить каждую из этих в отдельный файл.

Возможно ли в F # иметь межфайловые циклические зависимости?

10
задан John Gietzen 3 July 2011 в 21:42
поделиться