Haskell Support in Maguyva: Code Graphs for Type Classes and Modules
Haskell's types say a lot. The graph shows who relies on them.
Extensions
.hs, .lhs
Maguyva parses Elixir with AST, symbol, and graph support, so AI agents can follow modules, behaviours, protocols, and structs across Phoenix and OTP code.
Almost everything in Elixir is a macro call. defmodule, def, use, alias, and @impl all parse as calls, and use GenServer brings in behaviour that never appears in the file. A tool that only sees call syntax cannot tell a definition from a dependency, or a GenServer callback from a helper.
Maguyva maps those macros onto relationships, so an agent can see which modules implement a behaviour and who calls a context function.
Maguyva covers .ex and .exs files. Elixir’s macros map onto relationships:
alias, import, and require record imports.use records an import. For OTP and framework behaviours such as GenServer, Supervisor, Agent, Task, Phoenix.Controller, Phoenix.LiveView, and Ecto.Schema, it also records that the module implements that behaviour.@behaviour attributes and defimpl blocks record implementation of a behaviour or protocol.@doc, @spec, @impl, and @callback are recorded as annotations on the function that follows. Value attributes such as @timeout 5_000 are not.%User{} struct literals count as instantiation, raise records a throw, and rescue and catch record a catch.Language macros such as def, defp, defmodule, case, and with are filtered from calls, so the call graph shows your functions.
Accounts.register_user, and from which controllers?” (find_symbol, then dependency_search incoming)GenServer?” (dependency_search)get_task_context)def, defmodule, alias, and import forms are call nodes in the grammar, so only the functions preset in structural_search returns results, and only for anonymous fn functions. Use find_symbol for named functions and modules.IO.puts, String.*, Enum.take, and Process.*, are filtered from relationships. Use text_pattern_search for them.Connect a repository with the quickstart, then check the support matrix on the compatibility page. For other functional codebases, read the Haskell guide.
Best fit
Agent workflows
Engine details
Useful MCP entry points
Use it for a context function or module when you need the definition and callers; structural presets do not select named `def` forms.
Use incoming traversal on a behaviour or protocol to see which modules implement it.
Use it for prompts like “trace a checkout request from the controller to the database.”
Related guides
Haskell's types say a lot. The graph shows who relies on them.
Extensions
.hs, .lhs
Ruby reads like prose. The dependencies behind it still need a map.
Extensions
.gemfile, .gemspec, .rake, .rakefile, +2 more