0 people like it.
Like the snippet!
Generating a tree from a generic type
I needed a function to generate a tree from a c# class that had some odd semantics, but when I refactored it, I realised almost everyone must have something similar knocking around their codebase, so here's mine.
1:
2:
3:
4:
5:
6:
7:
8:
9:

type Tree<'T> =
Branch of 'T * seq<Tree<'T>>
Leaf of 'T
let rec GenerateTreeFromRecursiveObject hasChildren generateChildren current =
let generateTree = GenerateTreeFromRecursiveObject hasChildren generateChildren
match hasChildren current with
 true > Branch(current, seq{for next in generateChildren current do yield (generateTree next)})
 false > Leaf(current)

union case Tree.Branch: 'T * seq<Tree<'T>> > Tree<'T>
Multiple items
val seq : sequence:seq<'T> > seq<'T>
Full name: Microsoft.FSharp.Core.Operators.seq

type seq<'T> = System.Collections.Generic.IEnumerable<'T>
Full name: Microsoft.FSharp.Collections.seq<_>
type Tree<'T> =
 Branch of 'T * seq<Tree<'T>>
 Leaf of 'T
Full name: Script.Tree<_>
union case Tree.Leaf: 'T > Tree<'T>
val GenerateTreeFromRecursiveObject : hasChildren:('a > bool) > generateChildren:('a > #seq<'a>) > current:'a > Tree<'a>
Full name: Script.GenerateTreeFromRecursiveObject
val hasChildren : ('a > bool)
val generateChildren : ('a > #seq<'a>)
val current : 'a
val generateTree : ('a > Tree<'a>)
val next : 'a
More information