Haskell GHCAPI:查找实例函数的实现

Haskell GHCAPI:查找实例函数的实现,haskell,ghc,ghc-api,Haskell,Ghc,Ghc Api,我正在使用GHC为Haskell编写一个符号执行引擎,通常我需要在程序中找到各种函数的实例实现。然而,在浏览了typechecker生成的许多AST之后,我找不到任何方法将函数调用与它在实例块中的实现联系起来。AST没有支持匹配唯一键的明显解决方案的信息。与顶级函数定义不同,实例函数绑定中的Uniques与调用站点的Unique都不匹配。例如,在这个简单的程序中: 模块M,其中 甲级在哪里 foo::a b->b 新建框a=框a 举例说明一个方框,其中 foo(方框a)=a bar=foo(Bo

我正在使用GHC为Haskell编写一个符号执行引擎,通常我需要在程序中找到各种函数的
实例
实现。然而,在浏览了typechecker生成的许多AST之后,我找不到任何方法将函数调用与它在
实例
块中的实现联系起来。AST没有支持匹配
唯一
键的明显解决方案的信息。与顶级函数定义不同,实例函数绑定中的
Unique
s与调用站点的
Unique
都不匹配。例如,在这个简单的程序中:

模块M,其中
甲级在哪里
foo::a b->b
新建框a=框a
举例说明一个方框,其中
foo(方框a)=a
bar=foo(Box())
bar
的主体中,
foo
具有唯一的id
rrZ
。在实例定义的
HsBind
中,有以下varName-varUnique对:

  • 在顶级
    AbsBind
    中:
    • $cfoo
      a1dd
    • foo
      a1de
  • 在嵌套的
    AbsBind
    • foo
      a1dg

因为它们都不匹配callsite,所以我采用了一种间接方法,将callsite中的类型与具有相同名称的所有类型进行匹配,但这需要我为顶级函数中的实例编写单独的逻辑。是否有一种统一的方法来找到某个函数的实现?

最近我突然意识到,
Unique
不能匹配,因为实例通常不是唯一的。虽然在我提供的示例中这一点很明显,但对于
bar=foo
来说,它不会这样做,因为
bar
上的约束
A=>
只有在
bar
完全参数化时才会解决。