我有一个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
而不是部分专业版?
谢谢.