Author: jnthn
Date: 2009-10-08 22:49:07 +0200 (Thu, 08 Oct 2009)
New Revision: 28664
Modified:
docs/Perl6/Spec/S06-routines.pod
Log:
First cut of specification for signature introspection.
Modified: docs/Perl6/Spec/S06-routines.pod
===================================================================
--- docs/Perl6/Spec/S06-routines.pod 2009-10-08 18:39:51 UTC (rev 28663)
+++ docs/Perl6/Spec/S06-routines.pod 2009-10-08 20:49:07 UTC (rev 28664)
@@ -1924,7 +1924,55 @@
=back
+=head2 Signature Introspection
+A C<Signature> object can be introspected to find out the details of
+the parameters it is defined as expected. The C<.params> method will
+return a C<List> of C<Parameter> objects, which have the following
+readonly properties:
+
+ name The name of the lexical variable to bind to, if any
+ type The main type (the one multi-dispatch sorts by)
+ constraints Any further type constraints
+ readonly True if parameter has C<is readonly> trait
+ rw True if parameter has C<is rw> trait
+ copy True if parameter has C<is copy> trait
+ ref True if parameter has C<is ref> trait
+ named True if the parameter is to be passed named
+ named_names List of names a named parameter can be passed as
+ slurpy True if the parameter is slurpy
+ optional True if the parameter is optional
+ default A closure returning the default value
+ signature A nested signature to bind the argument against
+
+Note that C<constraints> will be something that can be smart-matched
+against if it is defined; if there are many constraints it may be a
+C<Junction> of some sort, but if there is just one it may be simply
+that one thing.
+
+Further, various things that appear in an original written signature
+will have been deconstructed a bit. For example, a signature like:
+
+ :(1)
+
+Will introspect the same was as:
+
+ :(Int $ where 1)
+
+And if we have:
+
+ subset Odd of Int where { $^n % 2 };
+ sub foo(Odd $x) { ... }
+
+Then the signature of foo will be equivalent to something like:
+
+ :(Int $x where { $^n % 2 })
+
+That is, the refinement type will have been deconstructed into the
+part that nominal type that multiple dispatch uses for sorting the
+candidates and an additional constraint.
+
+
=head1 Advanced subroutine features
=head2 The C<return> function