+ /*
+ public static interface Transformer {
+ public Fountain transform(Fountain in);
+
+ public static class Lift implements Fountain.Transformer {
+ private final Stream.Transformer func;
+ public Lift(Stream.Transformer func) { this.func = func; }
+ public Fountain transform(final Fountain in) {
+ return new Fountain() {
+ public Stream getStream() {
+ return func.transform(in.getStream()); } };
+ }
+ }
+ }
+ */
+
+ public static class Util {
+ public static Fountain create(String s) { return new StringFountain(s); }
+ public static Fountain concat(Fountain[] f) { return new Concatenate(f); }
+ public static Fountain concat(Fountain f1, Fountain f2) {
+ return new Concatenate(f1, f2);
+ }
+ public static Fountain concat(Fountain f1, Fountain f2, Fountain f3) {
+ return new Concatenate(f1, new Concatenate(f2, f3));
+ }
+ }