Проблема в том, что для чисел определены два моноида.Один с сложением, а другой с умножением.Они реализованы как экземпляры для новых типов Sum
и Product
, и вы должны указать, какой из них вам нужен, поскольку для простых числовых типов нет моноидных экземпляров.
*Main> times 5 (Sum 5)
Sum {getSum = 25}
*Main> times 5 (Product 5)
Product {getProduct = 3125}
Num
isупоминается потому, что 5
является полиморфным значением:
*Main> :t 5
5 :: Num a => a
Это обычно приводит к неоднозначным ошибкам типов повсюду, если не для тип по умолчанию , что заставляет компилятор проходитьнабор типов по умолчанию (обычно Integer
и Double
), и выберите первый, который подходит.Поскольку ни Integer
, ни Double
не имеют экземпляра Monoid
, тип по умолчанию не выполняется, и вы получаете неоднозначную ошибку типа.
Также возможно, что вы намеревались использовать список моноидов, так как это не ясноот вопроса, какого результата вы ожидали.
*Main> times 5 [5]
[5,5,5,5,5]