Introducing Kavorka

This is a very old article. It has been imported from older blogging software, and the formatting, images, etc may have been lost. Some links may be broken. Some of the information may no longer be correct. Opinions expressed in this article may no longer be held.

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.