我有一个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更喜欢最专业的{{1}}版本而不是部分专业版?
感谢。