Erlang 的 typer 推断出奇怪的字符串类型

Erlang's typer deduced weird types for strings

我正在探索 typer,并为它提供了一个函数,它只做:

const_str() -> "qwe".

推导出那个人的类型为:

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

,即“eqw”(哈?!),然后是这个“...”业务。

看起来常量字符串令人困惑typer;我知道我不应该像这样使用它们,因为有原子用于此目的;但是当我试图围绕 typer(和 Erlang 的类型选项)思考时,我认为这是令人惊讶和有趣的。谁能解释这里发生了什么? 谢谢!

  1. Erlang 中的字符串是与字符的 ASCII 代码(即 "qwe" = [$q,$w,$e] = [113,119,101])相对应的整数列表。
  2. 类型语言无法表达列表元素的顺序(并且不打算这样做)。
  3. 你得到的类型是"a nonempty list containing numbers 101, 113 and 119"的类型,这与推断所能得到的最接近。