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