Author: larry
Date: Fri Feb  8 12:15:28 2008
New Revision: 14503

Modified:
   doc/trunk/design/syn/S02.pod
   doc/trunk/design/syn/S04.pod

Log:
There is no Undef type; it's either some kind of Object or some kind of Failure 
(or Whatever)


Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod        (original)
+++ doc/trunk/design/syn/S02.pod        Fri Feb  8 12:15:28 2008
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 10 Aug 2004
-  Last Modified: 5 Feb 2008
+  Last Modified: 8 Feb 2008
   Number: 2
-  Version: 127
+  Version: 128
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -582,7 +582,7 @@
 =item *
 
 Variables with non-native types can always contain I<undefined> values,
-such as C<Undef>, C<Whatever> and C<Failure> objects.  See S04 for more
+such as C<Object>, C<Whatever> and C<Failure> objects.  See S04 for more
 about failures (i.e. unthrown exceptions):
 
     my Int $x = undef;    # works
@@ -856,13 +856,21 @@
 built-in C<undef> and C<fail> functions.  (See S04 for how failures
 are handled.)
 
-    Undef       Undefined (variants serve as prototype objects of classes)
+    Object      Uninitialized (derivatives serve as protoobjects of classes)
     Whatever    Wildcard (like undef, but subject to do-what-I-mean via MMD)
     Failure     Failure (lazy exceptions, thrown if not handled properly)
 
 Whenever you declare any kind of type, class, module, or package, you're
 automatically declaring a undefined prototype value with the same name.
 
+Whenever a C<Failure> value is put into a typed container, it takes
+on the type specified by the container but continues to carry the
+C<Failure> role.  (The C<undef> function merely returns the most
+generic C<Failure> object.  Use C<fail> to more specific failures.  Use
+C<Object> for the most generic non-failure undefined value.  The C<Any>
+type is also undefined, but excludes C<Junctions> so that autothreading
+may be dispatched using normal multiple dispatch rules.)
+
 =head2 Immutable types
 
 Objects with these types behave like values, i.e. C<$x === $y> is true

Modified: doc/trunk/design/syn/S04.pod
==============================================================================
--- doc/trunk/design/syn/S04.pod        (original)
+++ doc/trunk/design/syn/S04.pod        Fri Feb  8 12:15:28 2008
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 19 Aug 2004
-  Last Modified: 22 Jan 2008
+  Last Modified: 8 Feb 2008
   Number: 4
-  Version: 63
+  Version: 64
 
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -900,10 +900,16 @@
 C<Failure> objects, any of which refers to an unthrown C<Exception> object in
 C<$!> and knows whether it has been handled or not.
 
-If you test a C<Failure> for C<.defined> or C<.true>, it causes
-C<$!> to mark the exception as I<handled>, and acts as a harmless C<Undef>
-value thereafter.  Any other use of the C<Failure> will throw its associated
-exception immediately.
+If you test a C<Failure> for C<.defined> or C<.true>, it causes C<$!>
+to mark the exception as I<handled>; the exception acts as a relatively 
harmless
+undefined value thereafter.  Any other use of the C<Failure> object to
+extract a normal value will throw its associated exception immediately.
+(The C<Failure> may, however, be stored in any container whose type
+allows the C<Failure> role to be mixed in.)  The C<.handled> method
+returns false on failures that have not been handled.  It returns true for
+handled exceptions and for every other kind of object. (That is,
+it is an C<Object> method, not a C<Failure> method.  Only C<Failure> objects
+need to store the actual status however; other types just return C<True>.)
 
 Because the contextual variable C<$!> contains all exceptions collected in the
 current lexical scope, saying C<die $!> will throw all exceptions,

Reply via email to