http://www.perlmonks.org?node_id=1221031


in reply to Re^3: Recap: The Future of Perl 5
in thread Recap: The Future of Perl 5

The point of optional, gradual typing is to offer optional type safety. If I say "String", it must be defined and have an appropriate string value. Thus, undef would cause an exception. I would suggest that any non-overloaded reference would also throw an exception (No more printing out ARRAY(0x7fecea803280)). However, if stringification is directly overloaded, we'd have to respect the intent because printing DateTime->now is intended to work. The integer 42 would need to stringify to 42 because even Java allows this as the one case of operator overloading because it's so damned useful.

That being said, I could be smoking crack. And I'd want these to be exceptions, not warnings, because I find so many ways in which warnings can be overlooked.

Replies are listed 'Best First'.
Re^5: Recap: The Future of Perl 5
by chromatic (Archbishop) on Aug 24, 2018 at 18:27 UTC
    The point of optional, gradual typing is to offer optional type safety.

    This seems like a tricky feature in an allomorphic language like Perl, where intrinsics are polymorphic and operators are monomorphic.

    I would suggest that any non-overloaded reference would also throw an exception.

    I think there are cases where default stringification is desirable, and I suspect you'd have to go through each operator and each intrinsic to come up with a matrix of where it might be useful. This seems like a similar problem to smart match (though less so, because stringification for types should be a unary op, not a binary op).