const MAX_LEN=250, MIN_LEN=3; fcn compress(text){ // !empty byte/text stream -->Data (byte stream) sink:=Data(); cnt:=Ref(0); write:='wrap(c,n){ // helper function while(n>MAX_LEN){ sink.write(1); sink.write(MAX_LEN); sink.write(c); n-=MAX_LEN; } if(n>MIN_LEN){ sink.write(1); sink.write(n); sink.write(c); } else { do(n) { sink.write(c); } } }; text.reduce('wrap(a,b){ if(a==b) cnt.inc(); else{ write(a,cnt.value); cnt.set(1); } b },text[0]) : write(_,cnt.value); sink; }