4

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

module M where
  class A a where
    foo :: a b -> b

  newtype Box a = Box a
  instance A Box where
    foo (Box a) = a

  bar = foo (Box ())

在body中barfoo有唯一的id rrZ。在HsBind实例定义中,有以下 varName-varUnique 对:

  • 在顶级AbsBind
    • $cfooa1dd
    • fooa1de
  • 在嵌套AbsBind
    • fooa1dg

由于它们都不匹配调用站点,因此我采用了一种间接方法,将调用站点的类型与所有具有相同名称的类型进行匹配,但这需要我为顶级函数的实例编写单独的逻辑。是否有统一的方法来查找某些功能的实现?

4

0 回答 0