If you need to distinguish that way -- Yes, you can do that. Though, the general idea of dynamic typing is not to discriminate for types, unless absolutely necessary. (I find it debatable, though, how much this applies to a non-oop language like erlang -- I would love to hear what other people think about that topic)
Sometimes, however, it can be quite useful to have a distinction. In one of my projects, I had a string, which would go through different phases of escaping, depending on what was supposed to happen with the input string. Outputting a String that wasn't escaped properly, could pose a security risk. To make this safer, I made it a tagged tuple:
{my_string, false, false, ActualString}
And when one stage of escaping/processing has happened, I could switch the boolean:
{my_string, true, false, ActualString}
and then the output function that receives the string, can match for certain criteria:
output_html_escaped_string({my_string, true, _, ActualString}) -> ...
This way the function would raise an exception if I pass it an unprocessed string by accident (And I remember that did happen once or twice :).