I’ve just come across a library that had import Foo.BinaryUtils, warn: false peppered through it. That looked like a code smell so I started investigating. It turned out this module had macros in it used for bitstring specifiers, e.g.:
defmacro uint do
quote do: little - unsigned - 16
end
defmacro udint do
quote do: little - unsigned - 32
end
And these are used like so:
<<foo::uint(), bar::udint(), rest::binary>>
My question is why does this not work with require? Shouldn’t it? The library authors used warn: false because the module only contains these macros, and elixirc complains that the import is not used otherwise.


















