Currently to create a lambda Proc one has to use lambda { } or -> { }. For doing metaprogramming it would be nice to have a more OO way to generate them. Something like LambdaProc.new. That way one could write:
classMetaThingydefinitializeproc_class@anonymous_function=proc_class.newdo# Some Codeendendend
and pass in either Proc or LambdaProc depending on their needs, instead of:
classMetaThingydefinitializeproc_type@anonymous_function=caseproc_typewhen:procprocdo# Some Codeendwhen:lambdalambdado# Some Codeendendendendend
This is not a common use case, but would help make the language more orthogonal.
Problem is, when you allow LambdaProc.new, that have to accept non-lambda procs, like LambdaProc.new(&nonlambda). This way, a proc would be converted from/between lambda and non-lambda.
This is not a good idea. Right now a lambda is born to be a lambda and there is no way to turn it into a proc. If such property breaks, a programmer cannot guarantee what to expect to a block they wrote's parameter, because that proc can later be changed into a lambda by someone else. And there is no way to detect such change from that block itself before it is called.