haskell - ¿Existe una biblioteca que use ConstraintKinds para generalizar todas las clases de tipo base para permitir restricciones?
constraint-kinds (1)
Podemos usar la extensión ConstraintKinds para ampliar la funcionalidad de las clases de tipo base para permitir restricciones. Por ejemplo, podemos hacer un vector unboxed un functor:
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
(Ver estas posts blog para más detalles).
Me he dado cuenta de que estaba implementando una parte bastante grande de las clases de tipos de biblioteca base en este nuevo estilo (básicamente quiero poder trabajar de manera intercambiable entre vectores y listas sin caja), y me pregunto si ya existe una biblioteca para esto que deba usar. , o si debo hacer mío y agregarlo a hackear.
Edit: Además, ¿hay planes para agregar esto directamente a la base? Parece que no debería romper nada más simplemente actualizando las definiciones de clase directamente.
Como parece que nadie más tiene una biblioteca, he convertido lo que he hecho en un proyecto separado llamado ConstraintKinds y lo subí a github . Es extremadamente simple en este momento y probablemente no cubre el caso de uso de nadie más, pero siéntase libre de hacer sus propios cambios o enviar solicitudes.
Probablemente esperaré más comentarios sobre si esta es una buena dirección antes de cargar el proyecto para hackear.