什么 GHC/Haskell 规范说自由类型构造函数匹配最右边的类型?

What GHC/Haskell specification says that free type constructors match rightmost types?

最近当我试图将一种类型 * -> * -> * 的构造函数与一个绑定类型 var 传递给需要 * -> * 的构造函数的函数时,我措手不及。具体来说,就是将 (\x -> (x, 42)) :: (forall a. a -> (a, Int)) 传递给 forall c. (forall a. a -> c a) -> ... 类型的函数。这是模棱两可的,但不是 GHC 中的错误:(,) 转换为 * -> * 可以解释为左手参数或右手参数的构造函数,而 GHC 似乎只是默认为右手参数。对于更高级的比赛,它将采用正确的最多 个参数。要看到这一点,只需测试推断类型:

foo :: c a b -> a -> b -> ()
foo _ _ _ = ()

bar = foo ((), 42, 'a') 42 'a' -- typechecks

相反,我错误地认为它会按顺序匹配自由变量,但是这种更高级别的情况是唯一一次显然是首选的情况,而其他时候则无济于事。是否有描述此规则的官方文档?我有点恼火,但也明白这不是错误,因为我可以预见这可以节省用新类型包装很多东西。

除非我误解了这个问题,否则这只是因为类型应用程序是左关联的,就像函数应用程序一样。

(a, b)(,) a b((,) a) b。所以 (Int, a)((,) Int) a,但 (a, Int) 不是 <something> a