7
給定以下代碼(從attoparsec庫複製而來)內聯編譯指示可以做什麼?我認爲只有fmapR
纔是內聯的,但在其他Functor實例中定義的其他fmap
是有意義的。INLINE Pragma與類型組合
instance Functor (IResult t) where
fmap = fmapR
{-# INLINE fmap #-}
給定以下代碼(從attoparsec庫複製而來)內聯編譯指示可以做什麼?我認爲只有fmapR
纔是內聯的,但在其他Functor實例中定義的其他fmap
是有意義的。INLINE Pragma與類型組合
instance Functor (IResult t) where
fmap = fmapR
{-# INLINE fmap #-}
內聯編譯指示將複製函數的內容(在這種情況下fmapR
)到其中它被稱爲,如果編譯器可以證明所使用的算符是IResult
的位置。
的功能不能在下面的情況下被內聯的,因爲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
啊,所以fmap被「重寫」爲fmapR,但fmapR可能沒有內聯,如果我理解正確? – Long 2012-03-28 22:09:58
@Long - 是的,這是正確的。 – 2012-03-28 22:22:06