#!/usr/bin/perl -w

use strict;
use Stream;

sub merge {
  my $s1 = shift;
  my $s2 = shift;
  return $s2 if $s1->is_empty;
  return $s1 if $s2->is_empty;
  my $h1 = $s1->head;
  my $h2 = $s2->head;
  if ($h1 > $h2) {
    Stream->new($h2,sub { merge($s1,$s2->tail) });
  } elsif ($h1 < $h2) {
    Stream->new($h1,sub { merge($s1->tail,$s2) });
  } else {
    Stream->new($h1,sub { merge($s1->tail,$s2->tail) });
  }
}

sub hamming {
  my $hack = \1;
  my $hamming = Stream->new(
                        1,
			sub { merge($$hack->scale(2),
			            merge($$hack->scale(3),
				          $$hack->scale(5)))
			    }
			   );
  $hack = \$hamming;
  $hamming;
}

hamming()->show(20);