Вы деконструируете сложные типы данных через сопоставление с образцом. В большинстве случаев вы делаете это в аргументах своей функции. Если ваша функция f
принимает список в качестве аргумента, а не определяет его как
fun f X = ...
вы бы сказали
fun f x::xs = ...
Теперь, когда вы передадите ему список, он автоматически назначит x
первому элементу и xs
остальному.
В вашем случае это будет выглядеть примерно так:
fun sum Node(element,children)::siblings = ...