type IMPL_T = option; fn EACH(self: IMPL_T, f: fn(A) -> bool) { alt self { none { } some(a) { f(a); } } } fn SIZE_HINT(self: IMPL_T) -> option { alt self { none { some(0u) } some(_) { some(1u) } } }