Inspect protocol is responsible for converting any Elixir
data structure into an algebra document. This document is then
formatted, either in pretty printing format or a regular one.
Inspection is done using the functions available in
Many times, inspecting a structure can be implemented in function
of existing entities. For example, here is
defimpl Inspect, for: HashSet do import Inspect.Algebra def inspect(dict, opts) do concat ["#HashSet<", to_doc(HashSet.to_list(dict), opts), ">"] end end
concat function comes from
Inspect.Algebra and it
concatenates algebra documents together. In the example above,
it is concatenating the string
"HashSet<" (all strings are
valid algebra documents that keep their formatting when pretty
printed), the document returned by
Inspect.Algebra.to_doc/2 and the
Since regular strings are valid entities in an algebra document, an implementation of inspect may simply return a string, although that will devoid it of any pretty-printing.
In case there is an error while your structure is being inspected, Elixir will automatically fall back to a raw representation.
You can however access the underlying error by invoking the Inspect implementation directly. For example, to test Inspect.HashSet above, you can invoke it as:
t :: term