было сделать так, чтобы length имел тип Num i, Foldable t => t a -> i.
И если i это Int, используется оптимизированная версия length, если Integer, то другая оптимизированная, а иначе что-то наподобие genericLength.
Или на самом деле так низя?
Можно сделать так: class HasLength f where optimalLength :: Num i => f x -> i Или даже так: class HasLengthAs f i where optimalLength :: f x -> i А потом реализовать оптимальные функции для конкретных типов и сделать соответствующие инстансы. Или же можно использовать прагму RULES.
Так можно реализовать для Int и Integer, но можно ли оставить реализацию по-умолчанию для всех остальных типов?
Тогда только RULES, наверное. Создаёшь одну общую оптимизацию, а потом специализируешь её.
Обсуждают сегодня