Yeah, Perl 6 is going to allow us to do very interesting things. Given this code:

use v6; subset Filename of Str where { $_ ~~ :f }; sub foo (Filename $name) { say "Houston, we have a filename: $name"; } my Filename $foo = $*EXECUTABLE_NAME; foo($foo); foo($*EXECUTABLE_NAME); foo('no_such_file');

We get this output:

Houston, we have a filename: /Users/ovid/bin/perl6 Houston, we have a filename: /Users/ovid/bin/perl6 Constraint type check failed for parameter '$name' in Main (file src/gen_setting.pm, line 324)

Obviously the error message needs some work (and I would love to be able to generate custom error messages for subsets), but proper use of subsets are going to save a lot of code and prevent a lot of errors.