{"body":"role Optional[::Type = Any] {\n        has Type $.obj;\n\n        method say(::?CLASS:_: *%h, *@a) {\n                self\n        }\n        method FALLBACK(::?CLASS:D: Str $meth, *%h, *@a) {\n                self but False\n        }\n}\n\nmulti sub postfix:<?>(Optional:D $obj) {\n        $obj.obj // $obj but False\n}\n\nmulti sub postfix:<!>(Optional:D $obj) {\n        $obj.obj // fail qq<Optional \"$obj\" is not set>\n}\n\nmulti sub postfix:<?>(Optional:U $obj) {\n        $obj.new() but False\n}\n\nmulti sub postfix:<!>(Optional:U $obj) {\n        fail qq<Optional object is not set>\n}\n\nuse MONKEY-TYPING;\naugment class Any {\n        method Optional() {\n                Optional[self.WHAT].new(:obj(self))\n        }\n}\n\nmy Optional of Int $x;\n$x = 42.Optional;\n$x?.say;\n$x!.say;\n\nmy Optional of Int $y;\n$y?.say;\n$y!.say;","name":"","extension":"txt","url":"https://www.irccloud.com/pastebin/NwcmKKWA","modified":1448322331,"id":"NwcmKKWA","size":804,"lines":42,"own_paste":false,"theme":"","date":1448322331}