On Mon, May 02, 2005 at 03:04:57AM -0600, Luke Palmer wrote: : S12 says: : : subtype Str_not2b of Str where /^[isnt|arent|amnot|aint]$/; : : My brain parses this as: : : subtype Str_not2b[Str where /.../]; : : Or: : : subtype Str_not2b[Str] where /.../; : : Neither of which really reflect how it is really parsed.
It's closer to the former, but perhaps more like subtype Str_not2b[returns => :(Str where /.../)]; : It looks like : `subtype` has a special syntax. I find this to be free of special : syntax and clearer to boot: : : type Str_not2b ::= Str where /^[isnt|arent|amnot|aint]$/; I don't. That "type" keyword is just a strange way to write the "::" sigil. : Why don't we just ditch the `subtype` keyword? Because by similar arguments we should also disallow sub foo ($x, $y, $z) {...} class Dog is Mammal {...} in favor of &foo ::= sub ($x, $y, $z) {...} ::Dog ::= class is Mammal {...} I'd rather have most declarative keywords out front, and reserve ::= for bindings that require unusual calculations on the RHS. Though as Thomas pointed out, you can still write ::Str_not2b ::= Str where /^[isnt|arent|amnot|aint]$/; if you really want to. Larry