type Fix<'T> = delegate of 'T -> Fix<'T> let internal invoke (node : Node) (visitor:Fix<Node>) = visitor.Invoke(node) let internal apply (visitors : seq<Fix<Node>>) (node : Node) = visitors |> Seq.map (invoke node) let internal Visit (visitors : seq<Fix<Node>>) = BuildNodeSequence |> Seq.fold apply visitors |> ignore ... Visit (ToSeq visitor) ...