2010-11-29 11 views
5

Ist es möglich, gegenseitige rekursive Typen ([<Struct>]) über verschiedene Dateien verteilt zu haben? Die Typen befinden sich direkt unter einem Namespace.Organisieren Sie meine gegenseitigen rekursiven Typen

Meine Lösung ist, sie in eine große Datei zu legen und type ... and ... and ... etc Konstruktion zu verwenden. Ist es der einzige Weg?

Antwort

13

Sie können eine Technik verwenden, die das Lösen des rekursiven Knotens, bei dem Sie eine über die andere parametrisieren, genannt wird.

So folgt aus:

type a = B of b 
and b = A of a 

wird:

type 'b a = B of 'b 
type b = A of b a 
+0

Danke für die Antwort. Wird diese Art von Technik oft verwendet? Ich finde, dass F # Design-Richtlinien empfehlen, alles in eine große Datei zu stellen, oder? – Stringer

+0

Ich benutze es sicherlich oft und empfehle unseren Kunden, dass sie es oft verwenden, aber, ja, es scheint, unterschätzt zu werden. –

+0

'Lösen des rekursiven Knotens 'ist sehr nützlich, wenn Sie versuchen, Funktionen zu memoisieren. Es wurde beschrieben in der * Wenn wir Ersatz brauchen * von http://typeocaml.com/2015/01/20/mutable/ –