https://psalm.dev/r/1c49ff9da6
True result on non-empty $needle should lead to asserting the $haystack as non-empty-string.
Probably str_*_with() functions should be extracted from ClassMap and introduced into stub files. That's just my assumption though.