F# forward type declarations
You use ‘and’: type firstType = | T1 of secondType and secondType = | T1 of firstType
You use ‘and’: type firstType = | T1 of secondType and secondType = | T1 of firstType
‘let rec… and…’ is the syntax you seek. let rec F() = G() and G() = F() See also Adventures in F# Co-Recursion.