悪戦苦闘して、こういうのなら出来たんだけど・・・

datatype 'a tree = empty | leaf of 'a | node of 'a tree list;

fun flat empty = [] | flat (leaf x) = [x]
| flat (node [t]) = flat t
| flat (node (t1::t2)) = flat t1 @ flat (node t2);

- flat (node [node [leaf 1, leaf 2], leaf 3, empty]);
val it = [1,2,3] : int list

listでもこれ応用できないかな?
ところでなんでかWarningが出るけど何で?