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

StackOverflow https://stackoverflow.com//questions/12697348

  •  12-12-2019
  •  | 
  •  

Вопрос

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

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
.

(см. Это блог Сообщения для более подробной информации).

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


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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top