Подтвердить что ты не робот

Как я могу напечатать спецификацию для строки ASCII с одной буквой (значение 0-127)?

Эквивалентно, как я могу напечатать спецификацию для "одиночного" UTF8 char?

В определении типа я могу иметь общую "любую строку" или "любую строку utf8" с

@type tile :: String.t # matches any string
@type tile :: <<_::8>> # matches any single byte

но похоже, что для первого бита не может быть 0

@type tile :: <<0::1, _::7>>

Случай для одиночной последовательности бит UTF будет

@type tile :: <<0::1, _::7>> | 
              <<6::3, _::5, 2::2, _::6>> | 
              <<14::4, _::4, 2::2, _::6, 2::2, _::6>> |
              <<30::5, _::3, 2::2, _::6, 2::2, _::6, 2::2, _::6>>

(эти битовые шаблоны совпадают при использовании сопоставления с образцом, например

<<14::4, _::4, 2::2, _::6, 2::2, _::6>> = "○"

успешно.)

Но когда используется в спецификациях типов, компилятор очень жалуется на

== Compilation error in file lib/board.ex ==
** (ArgumentError) argument error
    (elixir) lib/kernel/typespec.ex:1000: Kernel.Typespec.typespec/3
    (elixir) lib/kernel/typespec.ex:1127: anonymous fn/4 in Kernel.Typespec.typespec/3
    (elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
    (elixir) lib/kernel/typespec.ex:1127: Kernel.Typespec.typespec/3
    (elixir) lib/kernel/typespec.ex:828: anonymous fn/4 in Kernel.Typespec.typespec/3
    (elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
    (elixir) lib/kernel/typespec.ex:828: Kernel.Typespec.typespec/3
    (elixir) lib/kernel/typespec.ex:470: Kernel.Typespec.translate_type/3

Есть ли способ typepec для некоторого битового шаблона, подобного этому?

4b9b3361