我正在使用 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中bar
,foo
有唯一的id rrZ
。在HsBind
实例定义中,有以下 varName-varUnique 对:
- 在顶级
AbsBind
:$cfoo
:a1dd
foo
:a1de
- 在嵌套
AbsBind
foo
:a1dg
由于它们都不匹配调用站点,因此我采用了一种间接方法,将调用站点的类型与所有具有相同名称的类型进行匹配,但这需要我为顶级函数的实例编写单独的逻辑。是否有统一的方法来查找某些功能的实现?