Почему мне нужен Data.Monoid. (<>) Только для старых GHC? - PullRequest
0 голосов
/ 27 октября 2018

В моем пакете Haskell сборок до GHC 8.4 мне нужно

import Data.Monoid ((<>))

до избегать

• Variable not in scope:
    (<>)

в то время как начиная с GHC 8.4 я не получаю ошибку, исключаю этот импорт.

Почему это? (<>) был реализован в другом месте? Каковы последствия выполнения этого импорта для последующих GHC, где это не нужно? Можно ли условно импортировать это только для старых GHC?

1 Ответ

0 голосов
/ 27 октября 2018

Почему это так?

Из-за предложения Полугруппы моноидов

Был ли (<>) реализован в другом месте?

Да, он был определен в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, как вы можете посмотреть здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...