This post was spurred by a recent discussion of whether or not Haskell code just works the first time you try it. As a less-than-expert Haskeller, my answer to that is "not so much." But even as a less than expert Haskeller, I find that my Haskell code needs much less debugging time than when I write in another language. It feels like a difference of kind, not one of degree. So I understand where the original claim comes from, even if I ultimately find it to be overstated. What's great about Haskell is that it has lots of language features that support robust code. Immutability of data gets lots of press, and deservedly so, but Haskell has many other features that help.
What this post is about is one of the Haskell techniques that helps me write code that is more solid. That technique is using type aliases to differentiate amongst the various kinds of strings that I am using.