Почему это так?
Из-за предложения Полугруппы моноидов
Был ли (<>)
реализован в другом месте?
Да, он был определен в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?
Да, через CPP см. Здесь условное исключениеэто благодаря orome.
Поскольку Semigroup
стал суперклассом Monoid
в фазе 2b предложения, и это было сделано в GHC 8.4, вы можете проверить, что версия базы больше, чем4.11.0.0, как вы можете посмотреть здесь .