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

Reply via email to