Pergunta

Ao trabalhar com instâncias derivados em Haskell, é possível funções da deriva para tipos arbitrários, ou estamos restritos a funções específicas?

Foi útil?

Solução

Você pode derivar instâncias das seguintes classes em Haskell 98: Eq., Ord, Enum, Ix, limitado, Read, e Show

Usando extensões ghc puder casos também derivam das seguintes classes: tipável, Dados, Functor, dobrável e Traversable. Há também uma extensão ghc que permite que um Newtype a instâncias provém de sua tipo de implementação.

Você não pode instâncias da deriva das classes arbitrárias pela simples razão de que Haskell não sabem como gerar as funções necessárias, sem conhecimento especial sobre a classe em questão.

Outras dicas

Você está restrito a classes particulares, em termos do que o compilador sabe como derivar para você. Usando um pré-processador, ou Modelo Haskell, você mesmo pode codificar-se novos mecanismos decorrentes, se você souber de abordagens gerais para rendendo implementações de funções para tipos específicos.

As outras duas respostas estão corretas. Mas se precisar de mais, há alguns pacotes em hackage que pode lidar com mais. I como Data.Derive muito, desde que você pode gerar o código-fonte diretamente (para compatibilidade) ou ligá-lo em Template Haskell para fazê-lo em tempo de compilação. Uma ampla gama de classes já são suportados, e é muito fácil de adicionar suporte para o seu próprio. Resumo: arremesso de publicidade para uma biblioteca muito legal: -)

Para adicionar a resposta de Don: derivar funcionalidade personalizada para tipos de dados é chamado programação genérica e há um monte de literatura sobre o assunto. Preprocessors e Template Haskell não são as únicas soluções; ver um dos papéis visão geral que lista de literatura para outras opções.

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