name() :: module()
t() :: %CleanMixer.CodeMap.CodeModule{name: name(), path: Path.t()}
abstract?(name()) :: boolean()
behaviour?(name()) :: boolean()
has_functions?(name()) :: boolean()
has_implementation?(name()) :: boolean()
implemented_behaviours(name()) :: [name()]
new(name(), Path.t()) :: t()
public_functions(name()) :: list()
struct?(name()) :: boolean()