Подтвердить что ты не робот

Есть ли библиотека, которая использует ConstraintKinds для обобщения всех классов базового типа, чтобы разрешить ограничения?

Мы можем использовать расширение ConstraintKinds для расширения функциональности классов базового типа, чтобы разрешить ограничения. Например, мы можем сделать unboxed vector функтором:

class Functor f where
    type FunctorConstraint f x :: Constraint
    type FunctorConstraint f x = ()
    fmap :: (FunctorConstraint f a, FunctorConstraint f b) => (a -> b) -> f a -> f b

instance Functor VU.Vector where
    type FunctorConstraint VU.Vector x = VU.Unbox x
    fmap = VU.map

(см. blog сообщения для более подробнее).

Я заметил, что я реализую довольно большую часть классов базового типа библиотеки в этом новом стиле (в основном я хочу иметь возможность работать взаимозаменяемо между unboxed векторами и списками), и мне интересно, существует ли библиотека для этого уже существует Я должен использовать, или если бы я должен был выманить себя и добавить его в хакерство.


Изменить: Кроме того, планируется ли добавить это прямо на базу? Похоже, что он не должен ломать ничего, просто обновляя определения классов напрямую.

4b9b3361

Ответ 1

Так как это звучит так, как никто другой не имеет библиотеки, я преобразовал то, что я сделал, в отдельный проект под названием ConstraintKinds и загрузил его в github. Это очень просто на данный момент и, вероятно, еще не охватывает какой-либо другой вариант использования, но не стесняйтесь делать свои собственные изменения или отправлять запросы.

Я, вероятно, буду ждать дополнительной обратной связи, если это хорошее направление, прежде чем загружать проект в хакер.