2009-09-04 10 views
27

Ich stolperte über dieses Problem in F #. Nehmen wir an, ich möchte zwei Typen deklarieren, die aufeinander verweisen:F # Vorwärts Typ Deklarationen


type firstType = 
    | T1 of secondType 
    //................ 

type secondType = 
    | T1 of firstType 
    //................  

Wie kann ich tun, damit der Compiler keinen Fehler erzeugen?

+1

Siehe auch http://stackoverflow.com/questions/680606/f-how-to-have-two-methods-calling-each-other – Brian

Antwort

44

Sie verwenden 'und':

type firstType = 
    | T1 of secondType 

and secondType = 
    | T1 of firstType 
+2

Jedes Mal, wenn ich fühle, ist etwas nicht elegant in F # Ich bin angenehm überrascht, dass es eine elegante Lösung gibt. – CodeMonkey

3

ich es dachte. Es ist:


type firstType = 
    | T1 of secondType 
    //................ 

and secondType = 
    | T1 of firstType 
    //................ 
+5

verwenden Sie die gleiche Notation auch für gegenseitig rekursive Funktionen - falls Sie das nicht schon wussten. – Massif

2

Die Einschränkung besteht darin, dass die Typen in derselben Datei deklariert werden müssen.