Structured recursion for non-uniform data-types. - Paul Alexander Blampied (2000)