C'è una biblioteca che utilizza costrizione per generalizzare tutte le classi di tipo base per consentire i vincoli?

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

  •  12-12-2019
  •  | 
  •  

Domanda

Possiamo utilizzare il vincolo di estensione per estendere la funzionalità delle classi di tipo base per consentire vincoli.Ad esempio, possiamo creare un functore Unboxed a 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
.

(vedi questi Blog Posts per ulteriori dettagli).

Mi sono notato di implementare una parte piuttosto ampia delle classi di tipo della biblioteca di base in questo nuovo stile (in pratica voglio essere in grado di lavorare in modo intercambiabile tra vettori ed elenchi non scaduti), e mi chiedo se una libreria per questo esiste giàDovrei usare, o se dovrei andare fuori e aggiungerlo all'hackage.


.

Modifica: Inoltre, ci sono piani per aggiungerlo direttamente alla base?Sembra che non dovrebbe infrangere nient'altro solo aggiornando direttamente le definizioni di classe.

È stato utile?

Soluzione

Dato che sembra che nessun altro abbia una biblioteca, ho convertito ciò che ho fatto in un progetto separato chiamato costriintkinds e Lo ha caricato a GitHub .È estremamente semplice al momento e probabilmente non copre ancora il caso di uso di nessun altro, ma non esitare a creare le tue modifiche o inviare richieste.

Probabilmente aspetterò più feedback su se questa è una buona direzione prima di caricare il progetto all'hackage.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top