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

上一篇: INLINE Pragma in combination with type classes

下一篇: Create Circular Button in Iphone SDK