% bracket_it - Bracket iterator with pre and post actions
%
% bracket_it :: 
%    iterator(A) ~'an iterator', 
%    (A=>void)   ~'action to perform before calling iterator',
%    (A=>void)   ~'action to perform after calling iterator'
% -> iterator(A) ~'new iterator incorporating pre and post actions'.
function it=bracket_it(it,pre,post)
	f=it{1}; it{1}=@bf;
	function x=bf(x), pre(x); x=f(x); post(x); end
end
