Хм, что-то я тут насоветовал, а сам не посмотрел. Почему-то казалось, что
divMod должен быть базовым.
-- Пн окт 24, 2016 07:47:49 --Посмотрел, то же через quotRem реализовано (да и а как иначе)?
Там ещё оптимизация (недаром такая куча кода вместо простой вашей строки).
В детали не вчитывался.
Про развёртку я тоже на авось написал. Разве что для интереса, как выглядеть будет.
-- Пн окт 24, 2016 07:54:07 --Кстати, совсем уж шутки ради попробуйте не делать
fromIntegral, получая список
Integerов. Просто для сравнения.
P. S. Ещё я нашёл модуль
Data.Digits из пакета digits, но там тоже как у вас, только основание любое, и зачем-то позволительно основание 1, которое вообще-то от другого вида позиционной системы. (Ну да ладно, этот вид заблуждений — особь статья.)
-- Пн окт 24, 2016 08:11:28 --Так divMod определяется через quotRem.
Я таки глянул в код. В инстансах всё-таки вижу отдельные примитивы для всех
div,
mod,
quot,
rem,
divMod,
quotRem (и это правильно), а в классе странно, что предпоследнее определяется с помощью последнего, а наоборот не сделали. (Класс
Eq прекрасно живёт с «циклическими» определениями (потому что до этого при определении инстанса дело не дойдёт — компилятор обязует нас определить хотя бы
== или
/=, потому что ему указали, какие минимальные полные определения позволять.)