Проблема в том, что вы не используете свой пользовательский тип.
Заданная сигнатура типа arrayToString :: forall a. Num a => [a] -> String
.Вы повсеместно определили количество для всех возможных типов a
, которые являются членами класса типов Num
.Это включает ваш тип, но также и любой другой числовой тип, который существует и будет существовать.Это слишком смелое утверждение.
Возможно, вы захотите изменить подпись на arrayToList :: [Numeric] -> String
, используя ваш тип напрямую, вместо того, чтобы полагаться на параметрический полиморфизм.
Кроме того, в качестве побочнойобратите внимание, []
является односвязным списком (или списком консунов), а не массивом.
РЕДАКТИРОВАТЬ: Чтобы перевести эту проблему в логику, вы должны сказать
- Существует набор вещей, называемых
Numeric
- Элементы
Numeric
являются членами классов Num
и Show
- Следовательно, для каждое возможноевведите когда-нибудь в классе
Num
, я могу превратить список этого типа в строку
Вы значительно расширили область действия оператора, чтобы он включал целую группутипов, о которых мы ничего не знаем и не имеем доказательств того, что они могут быть превращены в строки.