在GHC插件中应用多态函数
我想写一个GHC插件,为每个函数“添加一个钩子”。 假设我想在每个函数绑定的右侧应用一个类型为Ord a => (a -> b) -> a -> b
addHook
函数,
foo = [RHS]
成
foo = addHook [RHS]
这工作正常,如果我只是有兴趣添加钩子函数的Int -> Int
,在这种情况下,我让addHook
也有类型(Int -> Int) -> Int -> Int
,并调用mkCoreApp [AddHook] [RHS]
并将其绑定到我的GHC插件中的foo
。
然而,如果我想让addHook
成为多态,如上所述, Int -> Int
函数的转换后的GHC Core应该看起来像
foo = addHook @ GHC.Types.Int @ GHC.Types.Int GHC.Classes.$fOrdInt [RHS]
请注意,应该附加一些类型信息,但我无法在插件中找到构建这些信息的方法,而GHC在没有这些信息的情况下恐慌。 任何建议,将不胜感激。
链接地址: http://www.djcxy.com/p/7453.html