NAME
Earth - FP Library
ABSTRACT
FP Standard Library for Perl 5
VERSION
0.01
SYNOPSIS
package main;
use Earth;
wrap 'Venus::String', 'String';
# call(String, 'function', @args);
true;
DESCRIPTION
Earth is a functional-programming framework with standard library for
Perl 5, built on top of Venus which provides the underlying
object-oriented standard library. Perl is a multi-paradigm programming
language that also supports functional programming, but, Perl has an
intentionally limited standard library with an emphasis on providing
library support via the CPAN which is overwhelmingly object-oriented.
This makes developing in a functional style difficult as you'll
eventually need to rely on a CPAN library that requires you to switch
over to object-oriented programming.Earth facilitates functional
programming for Perl 5 by providing keyword functions which enable
indirect routine dispatching, allowing the execution of both functional
and object-oriented code.
FUNCTIONS
This package provides the following functions:
call
call(Str | Object | CodeRef $self, Any @args) (Any)
The call function dispatches function and method calls to a package and
returns the result.
Since 0.01
call example 1
# given: synopsis
my $string = call(String('hello'), 'titlecase');
# "Hello"
call example 2
# given: synopsis
my $default = call(String('hello'), 'default');
# ""
call example 3
# given: synopsis
my $space = call(String('hello'), 'space');
# bless( {value => "Venus::String"}, 'Venus::Space' )
catch
catch(CodeRef $block) (Error, Any)
The catch function executes the code block trapping errors and
returning the caught exception in scalar context, and also returning
the result as a second argument in list context.
Since 0.01
catch example 1
package main;
use Earth;
my $error = catch {die};
$error; # 'Died at ...'
catch example 2
package main;
use Earth;
my ($error, $result) = catch {error};
$error; # Venus::Error
catch example 3
package main;
use Earth;
my ($error, $result) = catch {true};
$result; # 1
chain
chain(Str | Object | CodeRef $self, Str | ArrayRef[Str] @args) (Any)
The chain function chains function and method calls to a package (and
return values) and returns the result.
Since 0.01
chain example 1
# given: synopsis
my $string = chain(String('hello world'), ['replace', 'world', 'cosmos'], 'get');
# "hello cosmos"
chain example 2
# given: synopsis
my $string = chain(String('hELLO World'), 'box', 'lowercase', 'kebabcase', 'unbox');
# "hello-world"
chain example 3
# given: synopsis
my $string = chain(String('hello'), 'space', 'inherits');
# ["Venus::Kind::Value"]
error
error(Maybe[HashRef] $args) (Error)
The error function throws a Venus::Error exception object using the
exception object arguments provided.
Since 0.01
error example 1
package main;
use Earth;
my $error = error;
# bless( {...}, 'Venus::Error' )
error example 2
package main;
use Earth;
my $error = error {
message => 'Something failed!',
};
# bless( {...}, 'Venus::Error' )
false
false() (Bool)
The false function returns a falsy boolean value which is designed to
be practically indistinguishable from the conventional numerical 0
value.
Since 0.01
false example 1
package main;
use Earth;
my $false = false;
# 0
false example 2
package main;
use Earth;
my $true = !false;
# 1
make
make(Str $package, Any @args) (Any)
The make function "call" in "calls" the new routine on the invocant and
returns the result which should be a package string or an object.
Since 0.01
make example 1
# given: synopsis
my $string = make('Venus::String');
# bless( {value => ""}, 'Venus::String' )
make example 2
# given: synopsis
my $string = make('Venus::String', 'hello world');
# bless( {value => "hello world"}, 'Venus::String' )
raise
raise(Str $class | Tuple[Str, Str] $class, Maybe[HashRef] $args) (Error)
The raise function generates and throws a named exception object
derived from Venus::Error, or provided base class, using the exception
object arguments provided.
Since 0.01
raise example 1
package main;
use Earth;
my $error = raise 'MyApp::Error';
# bless( {...}, 'Venus::Error' )
raise example 2
package main;
use Earth;
my $error = raise ['MyApp::Error', 'Venus::Error'];
# bless( {...}, 'Venus::Error' )
raise example 3
package main;
use Earth;
my $error = raise ['MyApp::Error', 'Venus::Error'], {
message => 'Something failed!',
};
# bless( {...}, 'Venus::Error' )
true
true() (Bool)
The true function returns a truthy boolean value which is designed to
be practically indistinguishable from the conventional numerical 1
value.
Since 0.01
true example 1
package main;
use Earth;
my $true = true;
# 1
true example 2
package main;
use Earth;
my $false = !true;
# 0
wrap
wrap(Str $package, Str $alias) (CodeRef)
The wrap function installs a wrapper function in the calling package
which when called either returns the package string if no arguments are
provided, or calls "make" on the package with whatever arguments are
provided and returns the result. Unless an alias is provided as a
second argument, special characters are stripped from the package to
create the function name.
Since 0.01
wrap example 1
# given: synopsis
my $coderef = wrap('Venus::Space');
# my $space = VenusSpace();
# "Venus::Space"
wrap example 2
# given: synopsis
my $coderef = wrap('Venus::Space');
# my $space = VenusSpace({});
# bless( {value => "Venus"}, 'Venus::Space' )
wrap example 3
# given: synopsis
my $coderef = wrap('Venus::Space', 'Space');
# my $space = Space();
# "Venus::String"
wrap example 4
# given: synopsis
my $coderef = wrap('Venus::Space', 'Space');
# my $space = Space({});
# bless( {value => "Venus"}, 'Venus::Space' )
wrap example 5
# given: synopsis
my $coderef = wrap('Venus::Space', 'Space');
# my $space = Space('Earth');
# bless( {value => "Earth"}, 'Venus::Space' )
AUTHORS
Awncorp, awncorp@cpan.org