Я могу использовать ключевое слово и
для настройки взаимно рекурсивных определений функций . Я также могу использовать и
для взаимно рекурсивных типов, но что, если существует взаимно рекурсивная связь между типом и 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 (где -> означает «зависит от»)