Подтвердить что ты не робот

GHC Предпочитайте одну специализацию над другой

У меня есть функция класса Haskell, которая выглядит следующим образом:

class Foo m where
   foo :: Num a => m a -> a

Я хочу сгенерировать две специализации 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 #-}

Из того, что я могу сказать, в файле, который содержит этот код, я получаю обе специализации. Однако в модуле, использующем foo, он всегда указывает на менее общую специализацию, т.е. foo :: Num a => X Int a -> a, даже когда a ~ Int.

Есть ли способ сказать GHC предпочесть наиболее специализированную версию foo, а не частично специализированную версию?

Спасибо.

4b9b3361