being more cautious about how we use ->meta
[gitmo/Moose.git] / PLANS
diff --git a/PLANS b/PLANS
index e009272..23ad296 100644 (file)
--- a/PLANS
+++ b/PLANS
@@ -39,12 +39,53 @@ The type checks can get expensive and some people have suggested that allowing
 the checks to be turned off would be helpful for deploying into performance 
 intensive systems. Perhaps this can actually be done as an option to make_immutable? 
 
+- add support for locally scoped TC
+
+This would borrow from MooseX::TypeLibrary to prefix the TC with the name 
+of the package. It would then be accesible from the outside as the fully 
+scoped name, but the local attributes would use it first. (this would need support 
+in the registry for this).
+
+- look into sugar extensions
+
+Use roles as sugar layer function providers (ala MooseX::AttributeHelpers). This 
+would allow custom metaclasses to provide roles to extend the sugar syntax with.
+
+(NOTE: Talk to phaylon a bit more on this)
+
 - misc. minor bits
 
 * make the errors for TCs use ->message
 * look into localizing the messages too
 * make ANON TCs be lazy, so they can possibly be subsituted for the real thing later
 * make ANON TCs more introspectable
+* add this ...
+
+#
+#   Type Definition
+#
+subtype 'Username',
+   from 'Str',
+  where {     (/[a-z][a-z0-9]+/i or fail('Invalid character(s)'))
+          and (length($_) >= 5   or fail('Too short (less than 5 chars)'))
+        }
+on_fail { MyException->throw(value => $_[0], message => $_[1]) };
+
+# fail() will just return false unless the call is made via
+$tc->check_or_fail($value);
+
+* and then something like this:
+
+subtype Foo => as Bar => where { ... } => scoped => -global;
+subtype Foo => as Bar => where { ... } => scoped => -local; 
+
+# or 
+
+subtype Foo => as Bar => where { ... } => in __PACKAGE__ ; 
+
+# or (not sure if it would be possible)
+
+my $Foo = subtype Bar => where { ... };
 
 
 -----------------------------------------------------------