Типограф Эрланга вывел странные типы для строк

Я исследую Typer, и дал ему функцию, которая ничего не делает, кроме:

const_str () -> "qwe".

Тип этого парня выводится как:

-spec const_str () -> [101 | 113 | 119,...]

то есть "eqw" (да?!), за которым следует это "..." дело.

Похоже, постоянные строки сбивают с толку Typer; Я понимаю, что я не должен использовать их как это, есть атомы для этой цели; но поскольку я пытаюсь обернуть голову вокруг типера (и вариантов типа Эрланга), я подумал, что это удивительно и интересно. Кто-нибудь может объяснить, что здесь происходит? Спасибо!

1 ответ

Решение
  1. Строки в Erlang представляют собой списки целых чисел, которые соответствуют ASCII-коду символов (т.е. "qwe" = [$q,$w,$e] = [113,119,101]).
  2. Язык типов не может выражать порядок элементов списка (и не стремится сделать это).
  3. Тип, который вы получили, это тип "непустого списка, содержащего числа 101, 113 и 119", который настолько близок, насколько может сделать вывод.
Другие вопросы по тегам