Introducing Kavorka
Kavorka is a function signatures module, along the lines of Function::Parameters, Method::Signatures, and MooseX::Method::Signatures.
Its features include:
- Named, positional and slurpy parameters
- Required and optional parameters
- Defaults for optional parameters
- Type constraints and value constraints
- Type coercions
- Return types
- Method modifiers
- Multi subs and multi methods
- Lexical (private) methods
- An introspection API that can integrate with Moose's MOP
- Speed
It probably has every feature you want from in a function signatures module, unless you want minimalism.
Here's how you might write a function with type checks on the incoming parameters and also the returned value:
fun maxnum (Num @numbers → Num) { my $max = shift @numbers; for (@numbers) { $max = $_ if $max < $_; } return $max; }
Kavorka is still not especially stable, but seems to work pretty well (except in some cases defining closures over variables outside the sub).
Feedback welcome.
While you are pointing to the other modules, to the casual observer it isn't obvious what the real advantages are to this module over the existing solutions.
The advantages are that Kavorka has features that the others don't (feature comparison) and usually performs better speed-wise.