I'm against. This proposal seems to be guided by the implementation rather than design. The question is: Why are these functions "excpecting narrow strings"? Isn't it because they operate on binary data, rather than text strings? Or alternatively text strings encoded in some particular transport encoding? What we should be able to declare is that "this function takes text", or "this function takes binary data", both of which are currently covered by the type "string". Being able to declare that something takes "string, but no values larger than 255" still doesn't make this distinction. And additionaly being able to make other arbitrary restrictions like "no values larger than 4095 (string(12)) is just silly.
I'm for readding the "buffer" datatype from LPC, but this proposal is bad.