На основе информации о Hackage пакет был опубликован в феврале 2016 года. На тот момент последний выпуск пакета base
было base-4.8.2.0
. В этом пакете есть Monoid
класс типов :
class Monoid a where
mempty :: a
-- ^ Identity of 'mappend'
mappend :: a -> a -> a
-- ^ An associative operation
mconcat :: [a] -> a
Но, таким образом, это не требует, чтобы члены были экземпляр класса типов Semigroup
, фактически этот класс типов еще не существует.
Начиная с base-4.11.0.0
, определение было изменено на:
class <b>Semigroup a =></b> Monoid a where
-- | Identity of 'mappend'
mempty :: a
-- | An associative operation
--
-- __NOTE__: This method is redundant and has the default
-- implementation @'mappend' = '(<>)'@ since /base-4.11.0.0/.
mappend :: a -> a -> a
mappend = (<>)
{-# INLINE mappend #-}
-- | Fold a list using the monoid.
--
-- For most types, the default definition for 'mconcat' will be
-- used, but the function is included in the class definition so
-- that an optimized version can be provided for specific types.
mconcat :: [a] -> a
mconcat = foldr mappend mempty
Таким образом, требуется, чтобы типы, являющиеся членами класса типов Monoid
, также были членами класса типов Semigroup
. Библиотека, конечно, этого не ожидала.
Причина, по которой система все еще стремится скомпилировать это, заключается в том, что описание пакета из NumberTheory
говорит:
build-depends: <b>base ==4.*</b>, containers ==0.5.*, primes ==0.2.*
Таким образом, предполагается, что он может собрать программное обеспечение с любой версией базовой версии 4.*
, поэтому 4.11
и выше по-прежнему считаются хорошими кандидатами.