GHC偏好一个专业化而不是另一个专业化

Gre*_*ory 10 haskell ghc

我有一个Haskell类型类函数,如下所示:

class Foo m where
   foo :: Num a => m a -> a
Run Code Online (Sandbox Code Playgroud)

我要生成的两个专业foo,一个用于任何时间都m ~ X Int和其他的时候m ~ X Int, a ~ Int.我为此写了以下代码:

instance Foo (X a) where
   {-# SPECIALIZE instance Foo (X Int) #-}
   foo = ...
   {-# SPECIALIZE foo :: X Int Int -> Int #-}
Run Code Online (Sandbox Code Playgroud)

据我所知,在包含此代码的文件中,我得到了两个专业化.但是,在使用Foo它的模块中,似乎总是指向不太通用的特化,foo :: Num a => X Int a -> a即使是a ~ Int.

有没有办法告诉GHC更喜欢最专业的版本foo而不是部分专业版?

谢谢.