Эквивалентно, как я могу напечатать спецификацию для "одиночного" 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 для некоторого битового шаблона, подобного этому?