;; this is untested
(bind-func Widget_find_postorder
(lambda (widget:Widget* pred:[i1,Widget*]*)
(if (not (null? widget))
(begin
(Widget_find_postorder (Widget_left_child widget) pred)
(Widget_find_postorder (Widget_right_child widget) pred)
(if (and (not (null? widget)) (pred widget)) widget
null))
widget)))