INLINE Pragma与类型类相结合
鉴于以下代码(从attoparsec库复制而来)内联编译指示可以做什么? 我认为只有fmapR
是内联的,而不是其他Functor实例中定义的其他fmap
。
instance Functor (IResult t) where
fmap = fmapR
{-# INLINE fmap #-}
如果编译器可以证明正在使用的函子是IResult
,则inline编译指示将把函数的内容(在本例中为fmapR
)复制到调用它的位置。
在以下情况下,函数不能内联,因为fmap
的定义是未知的:
f :: Functor f => f Int -> f Float
f = fmap fromIntegral
但是,这里已经知道,因为正在使用某个仿函数,并且函数可以被内联:
f :: IResult Int -> IResult Float
f = fmap fromIntegral
-- rewritten to: f = fmapR fromIntegral; might be further inlined
链接地址: http://www.djcxy.com/p/58551.html