Typle (Typle v0.3.0)
View SourceExpression-level type query library for Elixir 1.20+.
Reads inferred type signatures from compiled .beam files and performs
best-effort type inference to answer "what type does the compiler think
this expression has at line N, column C?"
Before inference, all macros in function bodies are expanded via
ExPanda, so pipe chains, unless,
use directives, and library DSLs are resolved to their underlying
forms. When expansion fails, the original AST is preserved and
inference falls back to its existing best-effort handling.
Usage
# Point query
Typle.type_at("lib/my_app/user.ex", 15, 5)
#=> {:ok, %Typle.Type{kind: :binary}}
# Full module map
Typle.types_for(MyApp.User)
#=> {:ok, %{{15, 5} => %Typle.Type{kind: :binary}, ...}}
# Read function signatures from a compiled module
Typle.signatures(Integer)
#=> {:ok, [%{fun: :to_string, arity: 1, clauses: ...}, ...]}For deeper inference using compiler internals (opt-in, unstable),
see Typle.Unstable.
Summary
Functions
Looks up the return type of a function call.
Reads function signatures from a compiled module's .beam file.
Returns the inferred type at the given file position.
Returns all inferred types for a module.
Returns all inferred types for a source file.
Functions
@spec return_type(module(), atom(), non_neg_integer(), keyword()) :: Typle.Type.t()
Looks up the return type of a function call.
Queries the signature store for module.function/arity and returns
the inferred return type.
Options
:unstable- accepted for API consistency but currently has no effect (return types are always resolved via the signature store)
@spec signatures( module() | String.t(), keyword() ) :: {:ok, [Typle.Beam.signature()]} | {:error, term()}
Reads function signatures from a compiled module's .beam file.
Returns the decoded type signatures as stored in the ExCk chunk.
Options
:unstable- accepted for API consistency but currently has no effect (signatures are always read from BEAM chunks)
@spec type_at(String.t(), non_neg_integer(), non_neg_integer(), keyword()) :: {:ok, Typle.Type.t()} | {:error, term()}
Returns the inferred type at the given file position.
Uses the stable inference engine (AST walking + signature store).
Options
:unstable- whentrue, uses the compiler-replay engine fromTyple.Unstablefor deeper inference (default:false)
@spec types_for( module(), keyword() ) :: {:ok, Typle.Inference.type_map()} | {:error, term()}
Returns all inferred types for a module.
Returns a map of {line, col} => Typle.Type.t() for each expression
in the module's source file.
Options
:unstable- whentrue, uses the compiler-replay engine fromTyple.Unstablefor deeper inference (default:false)
@spec types_for_file( String.t(), keyword() ) :: {:ok, Typle.Inference.type_map()} | {:error, term()}
Returns all inferred types for a source file.
Options
:unstable- whentrue, uses the compiler-replay engine fromTyple.Unstablefor deeper inference (default:false)