Если вам нужно различить это - да, вы можете это сделать. Тем не менее, общая идея динамической типизации не состоит в том, чтобы различать типы, если это не является абсолютно необходимым. (Тем не менее, я считаю спорным, насколько это применимо к языку, не относящемуся к опа, например, к эрлангам. Мне бы очень хотелось услышать, что другие люди думают об этом)
Иногда, однако, может быть весьма полезно провести различие. В одном из моих проектов у меня была строка, которая проходила различные этапы экранирования в зависимости от того, что должно было произойти с входной строкой. Вывод строки, которая не была экранирована должным образом, может представлять угрозу безопасности. Чтобы сделать это более безопасным, я сделал теговый кортеж:
{my_string, false, false, ActualString}
И когда произошел один этап экранирования / обработки, я мог переключить логическое значение:
{my_string, true, false, ActualString}
, а затем функция вывода, которая получает строку, может соответствовать по определенным критериям:
output_html_escaped_string({my_string, true, _, ActualString}) -> ...
Таким образом, функция вызовет исключение, если я передам ей необработанную строку случайно (и я помню, что произошло один или два раза:).