public override T ReduceLeft(Func <T, Func <T, T> > f) { return(_suffix.FoldLeft(f, _middle.FoldLeft(Node <T, M> .FoldLeft(f), _prefix.ReduceLeft(f)))); }