It's only bad in the sense that it's inefficient. It's preferable to most other string types in many ways. It's also totally reasonable to have in the prelude: [] is there, and Char is there, so really all they've done is slapped the two together. The current situation (importing ByteString or Text for performance) is pretty good IMO. Haskell doesn't have Map or Set or anything in the prelude, so I think it's reasonable to leave powerful packed text types out as well. In fact, I would even support leaving [] out of the prelude and making the import of Data.List explicit.
> lots of partial functions are legitimate red flags
This is true, but the fact that we're even complaining about this is a first-world problem. Other languages have partial behavior built in to the language. Try going to a python or java developer and telling them "array access should return an optional type instead of throwing an exception on out-of-bounds". This is totally reasonable to deal with in Haskell, but inconceivable in other languages.