# Maguyva 的 Haskell 支持：面向类型类与模块的代码图谱

Canonical source: https://maguyva.ai/zh-hans/languages/haskell

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 以 AST、符号和图谱支持 Haskell，让 AI 智能体跨模块追踪函数、类型类实例和数据构造器。

## 支持情况速览

- 支持等级: AST 和符号支持
- 编程语言
- 扩展名: .hs, .lhs
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

- 拥有大量模块、类型类和实例的 Haskell 服务与库。
- 改动一个数据类型就会波及远处的编译器、解析器和其他代码库。
- 在重构前用 AI 智能体阅读陌生 Haskell 代码的团队。

## 智能体工作流

- 在修改函数的类型签名之前，找到它的所有调用方。
- 列出拥有某个类型类实例的类型。
- 追踪某个数据构造器在哪里被构建，以及哪些函数使用它。

## Haskell 让浅层 AI 工具栽跟头的地方

Haskell 调用函数不需要括号，用运算符组合函数，并通过类型类分派。`render user` 是一次调用，`f . g <$> xs` 包含好几次，`show` 的含义则取决于该类型的实例。文本搜索能找到名字，却找不到名字背后的实例。

Maguyva 把实例和构造器记录为关系，让智能体能看到哪些类型实现了某个类，以及值在哪里被构建。

## Maguyva 在 Haskell 中提取什么

Maguyva 把 `.hs` 和 `.lhs` 文件映射为 Haskell。函数和绑定作为可调用对象提取，类型类、`data` 类型和 `newtype` 作为类型提取。以空格分隔的函数应用和中缀运算符中的调用都能被识别，导入会规范化 `qualified`、`hiding` 和 `as` 子句。

类型类和构造器会成为图谱中的关系：

- `instance Eq Point` 记录 `Point` 实现了 `Eq`。
- 当类方法在同一文件中有默认实现时，定义了该方法的实例会被记录为对默认实现的覆盖。
- 应用数据构造器（如 `Point 1 2`）计为实例化。
- `error`、`undefined` 和 `throw` 记录抛出，`catch` 等处理器记录捕获。

由于实例声明可以定义 `show` 或 `return` 这样的名字，同一文件中的定义不会被默认为同名裸调用的目标。

## 智能体提示词示例

- “谁调用了 `parseConfig`，来自哪些模块？”（先用 `find_symbol`，再用 `dependency_search` 的 incoming 方向）
- “哪些类型拥有 `ToJSON` 实例？”（`dependency_search`）
- “追踪一个请求如何被解码和校验。”（`get_task_context`）

## 已知限制

- 约 130 个 Prelude 和基础库名称（如 `map`、`foldr`、`fmap`、`pure` 和 `>>=`），以及 `Data.List`、`Control.Monad` 等模块，会从关系中过滤掉。查找它们请使用 `text_pattern_search`。
- 在语法中，原始的函数节点也表示函数类型，所以 `structural_search` 中的 `functions` 预设只返回 lambda，`methods` 和 `variables` 预设什么也选不到。具名函数请使用 `find_symbol`。
- 文学式 `.lhs` 文件会整体按 Haskell 语法读取，因此结果可能不完整。
- Haskell 没有装饰器语法，因此装饰器关系被标记为不适用。

## 后续步骤

通过[快速入门](/zh-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。其他函数式代码库请阅读 [Elixir 指南](/zh-hans/languages/elixir)。

## 引擎细节

- Haskell 支持把 `.hs` 和 `.lhs` 映射为 Haskell。类型类、`data` 类型和 `newtype` 都是类型，以空格进行的函数应用和中缀运算符中的调用都能被识别。
- `instance Eq Point` 记录 `Point` 实现了 `Eq`，替换同一文件中类默认实现的实例方法会记录覆盖。
- 数据构造器的应用计为实例化，约 130 个 Prelude 和基础库名称会从关系中过滤掉。

## 常用 MCP 入口工具

- `find_symbol`: 需要函数或类型的定义和引用时使用它；结构化预设只返回 lambda。
- `dependency_search`: 对类型类使用 incoming 方向遍历，查看哪些类型拥有实例。
- `get_task_context`: 用于“追踪一个请求如何被解码和校验”这类提示词。
