(0-) (tc +)
(datatype tree
Label : A;
_________________
Label : (tree A);
Label : A; Subtree : (tree A); Subtrees : (list (tree A));
===========================================================
[Label Subtree | Subtrees] : (tree A);
)
(define leaves
{ (tree A) --> (list A) }
[Label Subtree | Subtrees] -> (append (leaves Subtree)
(leaves* Subtrees))
Label -> [Label])
(define leaves*
{ (list (tree A)) --> (list A) }
[] -> []
[T | Ts] -> (append (leaves T) (leaves* Ts)))
true
(1+) type#tree : symbol
(2+) type error in rule 1 of leaves
(3+) type error in rule 2 of leaves*
(4+)
(I'm so sad because it's gradually become clearer to me that I'm never gonna get a grip with shen type system... :( )