rbs
                                
                                 rbs copied to clipboard
                                
                                    rbs copied to clipboard
                            
                            
                            
                        Add in `&untyped`
Currently, *untyped and **untyped can be used to accept any amount of any type of positional and keyword arguments. However, there's no way to accept a block of any type:
def foo: () { (*untyped, **untyped) -> untyped } -> void
indicates that the block doesn't accept block parameters itself. To fix this, you need to do
def foo: () { (*untyped, **untyped) { (*untyped, **untyped) -> untyped } -> untyped } -> untyped
But that block also needs a block itself, etc. ad nauseum. So, my proposal is to add in &untyped syntax, eg def foo: (&untyped) -> void. (This syntax also allows the possibility of naming the blocks—&untyped foo, and might allow for naming block variables themselves, such as: def yield_ten: (&block) { (Integer) -> void } -> void
Add a ? prefix to indicate optional block
def foo: () ?{ (*untyped, **untyped) -> void } -> void
Possible alternative:
def foo: () ?{ (...) -> void } -> void
Where ... eats everything just like in
def example(...) = 42 # The entire `...` is unused
The proposal makes sense. Will compose a proposal for block syntax updates including this.
def foo: (&block_type blk) -> void
The block_type must be a _ToProc (Hah! #1223).