#!/usr/bin/perl
sub wrap_value {
my $value=shift;
return sub {
return $value;
}
}
sub bind_func {
my ($value,$func)=@_;
return $func->($value);
}
sub lift_func {
my $func=shift;
return sub {
my $value=shift;
&bind_func($value,$func);
}
}
sub prefix {
my $value=shift;
return &wrap_value(“prefix ” . $value->());
}
sub suffix {
my $value=shift;
return &wrap_value($value->() . ” suffix”);
}
print &wrap_value(‘raja’)->(),”\n”;
print &bind_func(&wrap_value(‘raja’),\&prefix)->(),”\n”;
print &lift_func(\&prefix)->(&wrap_value(‘xyz’))->(),”\n”;
my $v=&wrap_value(’123′);
my $p=&lift_func(\&suffix)->($v);
my $s=&lift_func(\&prefix)->($p);
print $s->(),”\n”;
Filed under: Bookmarks Tagged: bind, functional-programming, identity, lift, monad, Perl, wrap
