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.