鉴于以下代码(从attoparsec库复制),内联编译指示有什么作用?我认为只有fmapR内联才有意义,而不是fmap其他Functor实例中定义的其他内容.
instance Functor (IResult t) where
fmap = fmapR
{-# INLINE fmap #-}
Run Code Online (Sandbox Code Playgroud)
fmapR如果编译器可以证明所使用的函子是 ,则内联编译指示会将函数的内容(在本例中为 )复制到调用它的位置IResult。
在以下情况下无法内联该函数,因为 的定义fmap未知:
f :: Functor f => f Int -> f Float
f = fmap fromIntegral
Run Code Online (Sandbox Code Playgroud)
然而,这里是已知的,因为正在使用某个函子,并且该函数可以内联:
f :: IResult Int -> IResult Float
f = fmap fromIntegral
-- rewritten to: f = fmapR fromIntegral; might be further inlined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |