Existe uma biblioteca que usa ConstraintKinds para generalizar todas as classes de tipo base para permitir restrições?

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

  •  12-12-2019
  •  | 
  •  

Pergunta

Podemos usar a extensão ConstraintKinds para estender a funcionalidade das classes de tipo base para permitir restrições.Por exemplo, podemos transformar um vetor unboxed em um 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

(Veja estes blog Postagens para mais detalhes).

Eu me percebi implementando uma grande parte das classes de tipo de biblioteca base neste novo estilo (basicamente quero ser capaz de trabalhar de forma intercambiável entre vetores e listas sem caixa) e estou me perguntando se já existe uma biblioteca para isso que eu deveria usar , ou se eu deveria dar corpo ao meu e adicioná-lo ao hackage.


Editar:Além disso, há planos para adicionar isso diretamente à base?Parece que não deveria quebrar mais nada apenas atualizando diretamente as definições de classe.

Foi útil?

Solução

Como parece que ninguém mais tem uma biblioteca, converti o que fiz em um projeto separado chamado ConstraintKinds e carreguei no github.É extremamente simples no momento e provavelmente ainda não cobre o caso de uso de mais ninguém, mas fique à vontade para fazer suas próprias alterações ou enviar solicitações.

Provavelmente esperarei por mais feedback sobre se esta é uma boa direção antes de enviar o projeto para hackage.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top