¿Hay una biblioteca que use los Kinds de restricción para generalizar todas las clases de tipo base para permitir restricciones?

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

  •  12-12-2019
  •  | 
  •  

Pregunta

Podemos usar los Kindkinds de extensión para extender 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

(consulte estos blog Publicaciones para más detalles).

Me he dado cuenta de la implementación de una parte bastante grande de las clases de tipo biblioteca base en este nuevo estilo (básicamente quiero poder trabajar indistintamente entre vectores y listas noboxed), y me pregunto si una biblioteca para esto ya existe queDebería usarlo, o si debo cargar la mía y agregarlo a Hackage.


Editar: También, ¿hay planes para agregar esto directamente a la base?Parece que no debería romper nada más solo al actualizar las definiciones de clase directamente.

¿Fue útil?

Solución

Dado que suena como si nadie más tiene una biblioteca, he convertido lo que he hecho en un proyecto separado llamado restrictkinds y Subido a GitHub .Es extremadamente simple en este momento y probablemente no cubre el caso de uso de nadie más, pero no dude en hacer sus propios cambios o enviar solicitudes.

Probablemente esperará más comentarios sobre si esta es una buena dirección antes de subir el proyecto a Hackage.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top