Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tadzik/typed-subroutines

Better type checking for first-class functions
https://github.com/tadzik/typed-subroutines

Last synced: 8 days ago
JSON representation

Better type checking for first-class functions

Awesome Lists containing this project

README

        

SYNOPSIS

use Typed::Subroutines;

# create a subtype from Sub
subset TwoArgSub of Sub where typed_sub(Any, Any);
subset TakesIntAndString of Sub where typed_sub(Int, Str);

my TwoArgSub $a;
my TakesIntAndString $b;

$a = sub ($a, $b) { ... }; # lives
$a = sub ($a) { ... }; # dies

$b = sub (Int $a, Str $b) { ... }; # lives
$b = sub (Int $a, $b) { ... }; # dies

# validate subroutines passed to your subroutines (dawg)
sub doStuff(Int $a, Str $b, &operation where typed_sub(Int, Str)}) {
...
}

doStuff(99, "bottles of beer", -> Int $a, Str $b { ... }) # lives
doStuff(99, "bottles of beer", -> Rat $a, Num $b { ... }) # dies

DESCRIPTION

Typed::Subroutines let you specify subroutine types verifying the parameter list so you can have better type checking for first-class functions.

I'll write more docs when I'm less tired.