Emm*_*ery 5 haskell ghc haskell-pipes
我正在查看管道库的源代码,例如在Core模块中,我不明白为什么作者到处都是使用定义函数的模式:
runEffect = go
where
go p = ...
Run Code Online (Sandbox Code Playgroud)
要么:
pull = go
where
go a' = ...
Run Code Online (Sandbox Code Playgroud)
要么:
reflect = go
where
go p = ...
Run Code Online (Sandbox Code Playgroud)
这是一些启用某些优化的技巧吗?我发现它很难看,如果它是一些优化技巧我真的希望编译器可以在没有这样的情况下做到这一点.但也许还有另一个原因?
GHC只会内联非递归函数,并且只有当它们从语法的角度"完全应用"时(即在调用站点,它们才会应用于定义中左侧出现的参数数量).
在您发布的示例中没有参数,但是定义可能是递归的,不会内联.进行此转换可能允许m在呼叫站点内联和专门(针对具体类型等)定义.
这是一些启用某些优化的技巧吗?我发现它很难看,如果它是一些优化技巧我真的希望编译器可以在没有这样的情况下做到这一点.
是的,这是超级跛脚.