在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

上一篇: Apply polymorphic function in a GHC plugin

下一篇: Can you partially constrain a type in Haskell?