package Camila::Boolean;

use 5.006;
use strict;
use warnings;
use Data::Dumper;
require Exporter;

our @ISA = qw(Exporter);
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw();

our $VERSION = '0.01';

our $prototypes = {
		   not => [[['Boolean'],'Boolean']],
		   equal => [[['Boolean','Boolean'],'Boolean']],
		   and => [[['Boolean', 'Boolean'], 'Boolean']],
		   or => [[['Boolean', 'Boolean'], 'Boolean']],
		  };

sub new   {
  my $a = shift;
  return bless( +{
		  type => 'Boolean',
		  bool => $a,
		 });
}

sub new_from_string {
  my $s = shift;
  for ($s) {
    return new(1) if /true/;
    return new(0) if /false/;
  }
  return new(0);
}

sub eval  {
  my $a = shift;
  return $a->{bool};
}

sub not   { my $a = shift; ($a->{bool})?new(0):new(1) }
sub true  { return new(1) }
sub false { return new(0) }
sub repr  { return Dumper(shift) }
sub show  { my $a = shift; return ($a->{bool})?"true":"false" }
sub equal {
  my ($a,$b) = @_;
  return true() if $a->{bool} == $b->{bool};
  return false();
}


1;
__END__

=head1 NAME

Camila::Boolean - Perl extension for Camila Boolean built-in type.

=head1 SYNOPSIS

  use Camila::Boolean;

  $true = Camila::Boolean::true;

  $false = Camila::Boolean::false;

=head1 AUTHOR

Alberto Simões, E<lt>albie@alfarrabio.di.uminho.ptE<gt>

=head1 SEE ALSO

L<Camila>, L<perl>.

=cut
