__repr__ should in fact always return a string representation that can be parsed back to an object when entered like that in the Python REPL, for Elixir's
Inspect this is not the case.
It is usually the case, but certain kinds of structures cannot survive the two-step structure->string->structure conversion, like functions (or any data structure containing a function in one of its fields), PIDs, Ports, etc.
Also, certain kinds of structures would be near-impossible to inspect when given a parseable representation. (Some examples:
Tensor). For these, a debugging-representation that follows the
#StructureName<put_anything_here>-format is used.
String.Chars is used also when doing string interpolation using e.g: