function x=foldl(fn,e,y,varargin)
% foldl - Fold combinator for sequences
%
% This function applies an associative operator to a list of arguments,
% starting from the left using the given starting element.
%
% foldl :: 
%    (X,Y->X)	~'associative binary operator',
%    X         ~'initial element',
%    seq(Y)    ~'a lazy sequence'
% -> X.

if nargin<4,
	x=e; 
	while ~isempty(y)
		x=fn(x,head(y));
		y=next(y);
	end
else
	opts=prefs('quiet',1,varargin{:});
	x=e; 
	while ~isempty(y)
		x=fn(x,head(y));
		y=next(y);
		if ~opts.quiet, fprintf('.'); end
		optpause(opts);
	end
end
