{
  package Data::Pointer::IO::Char;
  $VERSION	= 0.1;
  @ISA		= qw(Data::Pointer::IO);

  push @Data::Pointer::register, __PACKAGE__;

  use strict;
  use warnings;

  use Fcntl qw( :seek );

  ## can't have an lvaluable 
  sub deref {
	local $/ = \1;

	<$self->value>;
  }

  sub incr {
	my $self = shift;
	my $n    = shift || 1;

	$self{_index} += $n;

	seek $self->value, $n, SEEK_CUR;

	return $self;
  }

  sub decr {
	my $self = shift;
	my $n    = shift || 1;

	$self{_index} -= $n;

	seek $self->value, -$n, SEEK_CUR;

	return $self;
  }

  sub plus	{
  	my $self = shift;
  	my $n    = shift;
  	
  	return $self->mutant( index => $self->{_index} + $n);
  }

  sub minus	{
  	my $self = shift;
  	my $n    = shift;
  	
  	return $self->mutant( index => $self->{_index} - $n);
  }
}
