F #: возможна ли взаимная рекурсия между типами и функциями?

Я могу использовать ключевое слово и для настройки взаимно рекурсивных определений функций . Я также могу использовать и для взаимно рекурсивных типов, но что, если существует взаимно рекурсивная связь между типом и d функция? Единственный ли у меня вариант сделать функцию членом типа или я могу использовать здесь что-то похожее на и ?

Редактировать: Добавление упрощенного псевдо-примера, который, я надеюсь, иллюстрирует то, что я пытаюсь to do

// A machine instruction type
type Instruction = Add | CallMethod int (* method ID *) | ...

// A class representing a method definition
type MethodDef (fileName : string) =
    member x.Params with get () = ...
    member x.Body with get() =
        let insts = readInstructions fileName
        Array.map toAbstractInst insts

// a more abstract view of the instructions
and AbstractInstruction = AbstAdd | AbstCallMethod MethodDef | ...

// a function that can transform an instruction into its abstract form
let toAbstractInst = function
    | Add -> AbstAdd
    | CallMethod methodId -> AbstCallMethod (somehowResolveId methodId)
    | ...

Итак, вы можете видеть здесь, что рекурсивная связь устанавливается довольно косвенно: MethodDef <-> AbstractInst AND MethodDef -> toAbstractInst -> AbstractInstruction (где -> означает «зависит от»)

6
задан Keith 13 August 2011 в 17:19
поделиться