1
GHC中自动专业化的及物性
从GHC 7.6 的文档中: 您通常甚至根本不需要SPECIALIZE编译指示。编译模块M时,GHC的优化器(带有-O)自动考虑M中声明的每个顶级重载函数,并将其专门化为M中调用它的不同类型。优化器还考虑每个导入的INLINABLE重载函数,并将其专门用于M中不同类型的调用。 和 此外,给定函数f的SPECIALIZE编译指示,GHC将自动为f调用的任何类型类重载函数创建专用化,如果它们与SPECIALIZE编译指示在同一模块中,或者它们是不可插入的;等等。 因此,GHC应该自动对标记为没有杂用语的某些/大多数/全部(?)函数进行特殊化处理,如果我使用显式的杂用语,则该特殊化是可传递的。我的问题是:自动专业化是可传递的吗?INLINABLE 具体来说,这是一个小例子: Main.hs: import Data.Vector.Unboxed as U import Foo main = let y = Bar $ Qux $ U.replicate 11221184 0 :: Foo (Qux Int) (Bar (Qux ans)) = iterate (plus y) y !! 100 in putStr $ show $ foldl1' (*) ans Foo.hs: …