为什么仅对较旧的GHC才需要Data.Monoid。(<>)?

时间:2018-10-27 17:21:05

标签: haskell package

在GHC 8.4之前的Haskell package builds中,我需要

import Data.Monoid ((<>))

avoid

• Variable not in scope:
    (<>)

从GHC 8.4开始,我没有错误排除此导入。

这是为什么? (<>)是否已在其他地方实现?对于以后不需要的GHC,进行此导入会有什么后果?是否可以有条件地将其仅用于较旧的GHC?

1 个答案:

答案 0 :(得分:8)

这是为什么?

由于Semigroup Monoid Proposal

(<>)是否已在其他地方实现?

是的,它是在GHC.Base中定义的:

[nix-shell:~]$ ghci
GHCi, version 8.4.3: http://www.haskell.org/ghc/  :? for help
Prelude> :t (<>)
(<>) :: Semigroup a => a -> a -> a
Prelude> :info (<>)
class Semigroup a where
  (<>) :: a -> a -> a
  ...
        -- Defined in ‘GHC.Base’
infixr 6 <>
Prelude>

对于以后不需要的GHC,进行此导入会有什么后果?

由于Data.Monoid重新导出(<>),到目前为止,没有任何内容。如果我正确阅读了该建议,则没有删除该再出口的计划。

能否仅对较老的GHC进行条件导入?

是的,感谢orome,请通过CPP参见此处conditional exclude it

由于Semigroup在提案的阶段2b中成为Monoid的超类,并且是在GHC 8.4中完成的,因此您可以检查基本版本是否大于4.11.0.0。查找here