haskell - INLINE Pragma 与类型类相结合

标签 haskell ghc

给定以下代码(从 attoparsec 库复制),内联编译指示有何作用?我认为只有 fmapR 内联才有意义,而在其他 Functor 实例中定义的其他 fmap 则没有意义。

instance Functor (IResult t) where
    fmap = fmapR
    {-# INLINE fmap #-}

最佳答案

如果编译器可以证明所使用的仿函数是IResult<,则内联编译指示会将函数的内容(在本例中为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

关于haskell - INLINE Pragma 与类型类相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915271/

相关文章:

monads - 将 Show 实例添加到 RWH 的 RandomState 示例

performance - Haskell 函数 nub 效率低下

mongodb - 如何在 persistent-mongoDB 中使用 MongoDB 查询选择器? (Yesod)

haskell - 如何在 Haskell 中使 CAF 不是 CAF?

haskell - 使用 IO.readLn 从 Haskell 中的标准输入读取单行

haskell - Haskell 中的 Control.Parallel 编译问题

haskell - IO monad 中的函数组合

haskell - 如何使用带有标志的类型系统来处理有时共享、有时独占的函数?

ubuntu - 如何将 GHCI(命令和命令结果)输出到 bash 和文本文件?

比较 Haskell 和 C 计算素数的速度